fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ck1PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCk02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlClByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CgpNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELApJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQphbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQooSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KClRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCklOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgooSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLApCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQpBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCk1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCgpZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQpzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgpyZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cwpvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgojIGZyZWFsLnM6CiMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MEZQU1AgcGFja2FnZQojIGFuZCBjb250YWlucyB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhlIHBhY2thZ2UuIFRoZSB1c2VyLCBpbgojIGVmZmVjdCwgYnJhbmNoZXMgdG8gb25lIG9mIHRoZSBicmFuY2ggdGFibGUgZW50cmllcyBsb2NhdGVkCiMgYWZ0ZXIgXzA2MEZQU1BfVEFCTEUuCiMJQWxzbywgc3Vicm91dGluZSBzdHVicyBleGlzdCBpbiB0aGlzIGZpbGUgKF9mcHNwX2RvbmUgZm9yCiMgZXhhbXBsZSkgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgRlBTUCBwYWNrYWdlIGl0c2VsZiBpbiBvcmRlcgojIHRvIGNhbGwgYSBnaXZlbiByb3V0aW5lLiBUaGUgc3R1YiByb3V0aW5lIGFjdHVhbGx5IHBlcmZvcm1zIHRoZQojIGNhbGxvdXQuIFRoZSBGUFNQIGNvZGUgZG9lcyBhICJic3IiIHRvIHRoZSBzdHViIHJvdXRpbmUuIFRoaXMKIyBleHRyYSBsYXllciBvZiBoaWVyYXJjaHkgYWRkcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBwZW5hbHR5IGJ1dAojIGl0IG1ha2VzIHRoZSBGUFNQIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG1vcmUgbWFpbmF0aW5hYmxlLgojCgpzZXQJX29mZl9ic3VuLAkweDAwCnNldAlfb2ZmX3NuYW4sCTB4MDQKc2V0CV9vZmZfb3BlcnIsCTB4MDgKc2V0CV9vZmZfb3ZmbCwJMHgwYwpzZXQJX29mZl91bmZsLAkweDEwCnNldAlfb2ZmX2R6LAkweDE0CnNldAlfb2ZmX2luZXgsCTB4MTgKc2V0CV9vZmZfZmxpbmUsCTB4MWMKc2V0CV9vZmZfZnB1X2RpcywJMHgyMApzZXQJX29mZl90cmFwLAkweDI0CnNldAlfb2ZmX3RyYWNlLAkweDI4CnNldAlfb2ZmX2FjY2VzcywJMHgyYwpzZXQJX29mZl9kb25lLAkweDMwCgpzZXQJX29mZl9pbXIsCTB4NDAKc2V0CV9vZmZfZG1yLAkweDQ0CnNldAlfb2ZmX2RtdywJMHg0OApzZXQJX29mZl9pcncsCTB4NGMKc2V0CV9vZmZfaXJsLAkweDUwCnNldAlfb2ZmX2RyYiwJMHg1NApzZXQJX29mZl9kcncsCTB4NTgKc2V0CV9vZmZfZHJsLAkweDVjCnNldAlfb2ZmX2R3YiwJMHg2MApzZXQJX29mZl9kd3csCTB4NjQKc2V0CV9vZmZfZHdsLAkweDY4CgpfMDYwRlBTUF9UQUJMRToKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBIZXJlJ3MgdGhlIHRhYmxlIG9mIEVOVFJZIFBPSU5UUyBmb3IgdGhvc2UgbGlua2luZyB0aGUgcGFja2FnZS4KCWJyYS5sCQlfZnBzcF9zbmFuCglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3Bfb3BlcnIKCXNob3J0CQkweDAwMDAKCWJyYS5sCQlfZnBzcF9vdmZsCglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3BfdW5mbAoJc2hvcnQJCTB4MDAwMAoJYnJhLmwJCV9mcHNwX2R6CglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3BfaW5leAoJc2hvcnQJCTB4MDAwMAoJYnJhLmwJCV9mcHNwX2ZsaW5lCglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3BfdW5zdXBwCglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3BfZWZmYWRkCglzaG9ydAkJMHgwMDAwCgoJc3BhY2UJCTU2CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJX2Zwc3BfZG9uZQpfZnBzcF9kb25lOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RvbmUsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF9vdmZsCl9yZWFsX292Zmw6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfb3ZmbCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX3VuZmwKX3JlYWxfdW5mbDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl91bmZsLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfaW5leApfcmVhbF9pbmV4OgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2luZXgsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF9ic3VuCl9yZWFsX2JzdW46Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfYnN1biwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX29wZXJyCl9yZWFsX29wZXJyOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX29wZXJyLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfc25hbgpfcmVhbF9zbmFuOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3NuYW4sJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF9kegpfcmVhbF9kejoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9keiwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX2ZsaW5lCl9yZWFsX2ZsaW5lOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2ZsaW5lLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfZnB1X2Rpc2FibGVkCl9yZWFsX2ZwdV9kaXNhYmxlZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9mcHVfZGlzLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfdHJhcApfcmVhbF90cmFwOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3RyYXAsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF90cmFjZQpfcmVhbF90cmFjZToKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl90cmFjZSwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX2FjY2VzcwpfcmVhbF9hY2Nlc3M6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfYWNjZXNzLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfaW1lbV9yZWFkCl9pbWVtX3JlYWQ6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaW1yLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZApfZG1lbV9yZWFkOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RtciwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9kbWVtX3dyaXRlCl9kbWVtX3dyaXRlOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RtdywlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9pbWVtX3JlYWRfd29yZApfaW1lbV9yZWFkX3dvcmQ6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaXJ3LCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2ltZW1fcmVhZF9sb25nCl9pbWVtX3JlYWRfbG9uZzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pcmwsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV9yZWFkX2J5dGUKX2RtZW1fcmVhZF9ieXRlOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RyYiwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9kbWVtX3JlYWRfd29yZApfZG1lbV9yZWFkX3dvcmQ6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHJ3LCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZF9sb25nCl9kbWVtX3JlYWRfbG9uZzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kcmwsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV93cml0ZV9ieXRlCl9kbWVtX3dyaXRlX2J5dGU6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHdiLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fd3JpdGVfd29yZApfZG1lbV93cml0ZV93b3JkOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R3dywlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9kbWVtX3dyaXRlX2xvbmcKX2RtZW1fd3JpdGVfbG9uZzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd2wsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgojCiMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2V0IG9mIGRlZmluZSBzdGF0ZW1lbnRzIGZvciBjb25zdGFudHMKIyBpbiBvcmRlciB0byBwcm9tb3RlIHJlYWRhYmlsaXR5IHdpdGhpbiB0aGUgY29yZWNvZGUgaXRzZWxmLgojCgpzZXQgTE9DQUxfU0laRSwJCTE5MgkJCSMgc3RhY2sgZnJhbWUgc2l6ZShieXRlcykKc2V0IExWLAkJCS1MT0NBTF9TSVpFCQkjIHN0YWNrIG9mZnNldAoKc2V0IEVYQ19TUiwJCTB4NAkJCSMgc3RhY2sgc3RhdHVzIHJlZ2lzdGVyCnNldCBFWENfUEMsCQkweDYJCQkjIHN0YWNrIHBjCnNldCBFWENfVk9GRiwJCTB4YQkJCSMgc3RhY2tlZCB2ZWN0b3Igb2Zmc2V0CnNldCBFWENfRUEsCQkweGMJCQkjIHN0YWNrZWQgPGVhPgoKc2V0IEVYQ19GUCwJCTB4MAkJCSMgZnJhbWUgcG9pbnRlcgoKc2V0IEVYQ19BUkVHUywJCS02OAkJCSMgb2Zmc2V0IG9mIGFsbCBhZGRyZXNzIHJlZ3MKc2V0IEVYQ19EUkVHUywJCS0xMDAJCQkjIG9mZnNldCBvZiBhbGwgZGF0YSByZWdzCnNldCBFWENfRlBSRUdTLAkJLTM2CQkJIyBvZmZzZXQgb2YgYWxsIGZwIHJlZ3MKCnNldCBFWENfQTcsCQlFWENfQVJFR1MrKDcqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE3CnNldCBPTERfQTcsCQlFWENfQVJFR1MrKDYqNCkJCSMgZXh0cmEgY29weSBvZiBzYXZlZCBhNwpzZXQgRVhDX0E2LAkJRVhDX0FSRUdTKyg2KjQpCQkjIG9mZnNldCBvZiBzYXZlZCBhNgpzZXQgRVhDX0E1LAkJRVhDX0FSRUdTKyg1KjQpCnNldCBFWENfQTQsCQlFWENfQVJFR1MrKDQqNCkKc2V0IEVYQ19BMywJCUVYQ19BUkVHUysoMyo0KQpzZXQgRVhDX0EyLAkJRVhDX0FSRUdTKygyKjQpCnNldCBFWENfQTEsCQlFWENfQVJFR1MrKDEqNCkKc2V0IEVYQ19BMCwJCUVYQ19BUkVHUysoMCo0KQpzZXQgRVhDX0Q3LAkJRVhDX0RSRUdTKyg3KjQpCnNldCBFWENfRDYsCQlFWENfRFJFR1MrKDYqNCkKc2V0IEVYQ19ENSwJCUVYQ19EUkVHUysoNSo0KQpzZXQgRVhDX0Q0LAkJRVhDX0RSRUdTKyg0KjQpCnNldCBFWENfRDMsCQlFWENfRFJFR1MrKDMqNCkKc2V0IEVYQ19EMiwJCUVYQ19EUkVHUysoMio0KQpzZXQgRVhDX0QxLAkJRVhDX0RSRUdTKygxKjQpCnNldCBFWENfRDAsCQlFWENfRFJFR1MrKDAqNCkKCnNldCBFWENfRlAwLAkJRVhDX0ZQUkVHUysoMCoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAwCnNldCBFWENfRlAxLAkJRVhDX0ZQUkVHUysoMSoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAxCnNldCBFWENfRlAyLAkJRVhDX0ZQUkVHUysoMioxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAyIChub3QgdXNlZCkKCnNldCBGUF9TQ1IxLAkJTFYrODAJCQkjIGZwIHNjcmF0Y2ggMQpzZXQgRlBfU0NSMV9FWCwJCUZQX1NDUjErMApzZXQgRlBfU0NSMV9TR04sCUZQX1NDUjErMgpzZXQgRlBfU0NSMV9ISSwJCUZQX1NDUjErNApzZXQgRlBfU0NSMV9MTywJCUZQX1NDUjErOAoKc2V0IEZQX1NDUjAsCQlMVis2OAkJCSMgZnAgc2NyYXRjaCAwCnNldCBGUF9TQ1IwX0VYLAkJRlBfU0NSMCswCnNldCBGUF9TQ1IwX1NHTiwJRlBfU0NSMCsyCnNldCBGUF9TQ1IwX0hJLAkJRlBfU0NSMCs0CnNldCBGUF9TQ1IwX0xPLAkJRlBfU0NSMCs4CgpzZXQgRlBfRFNULAkJTFYrNTYJCQkjIGZwIGRlc3RpbmF0aW9uIG9wZXJhbmQKc2V0IEZQX0RTVF9FWCwJCUZQX0RTVCswCnNldCBGUF9EU1RfU0dOLAkJRlBfRFNUKzIKc2V0IEZQX0RTVF9ISSwJCUZQX0RTVCs0CnNldCBGUF9EU1RfTE8sCQlGUF9EU1QrOAoKc2V0IEZQX1NSQywJCUxWKzQ0CQkJIyBmcCBzb3VyY2Ugb3BlcmFuZApzZXQgRlBfU1JDX0VYLAkJRlBfU1JDKzAKc2V0IEZQX1NSQ19TR04sCQlGUF9TUkMrMgpzZXQgRlBfU1JDX0hJLAkJRlBfU1JDKzQKc2V0IEZQX1NSQ19MTywJCUZQX1NSQys4CgpzZXQgVVNFUl9GUElBUiwJCUxWKzQwCQkJIyBGUCBpbnN0ciBhZGRyZXNzIHJlZ2lzdGVyCgpzZXQgVVNFUl9GUFNSLAkJTFYrMzYJCQkjIEZQIHN0YXR1cyByZWdpc3RlcgpzZXQgRlBTUl9DQywJCVVTRVJfRlBTUiswCQkjIEZQU1IgY29uZGl0aW9uIGNvZGVzCnNldCBGUFNSX1FCWVRFLAkJVVNFUl9GUFNSKzEJCSMgRlBTUiBxb3V0aWVudCBieXRlCnNldCBGUFNSX0VYQ0VQVCwJVVNFUl9GUFNSKzIJCSMgRlBTUiBleGNlcHRpb24gc3RhdHVzIGJ5dGUKc2V0IEZQU1JfQUVYQ0VQVCwJVVNFUl9GUFNSKzMJCSMgRlBTUiBhY2NydWVkIGV4Y2VwdGlvbiBieXRlCgpzZXQgVVNFUl9GUENSLAkJTFYrMzIJCQkjIEZQIGNvbnRyb2wgcmVnaXN0ZXIKc2V0IEZQQ1JfRU5BQkxFLAlVU0VSX0ZQQ1IrMgkJIyBGUENSIGV4Y2VwdGlvbiBlbmFibGUKc2V0IEZQQ1JfTU9ERSwJCVVTRVJfRlBDUiszCQkjIEZQQ1Igcm91bmRpbmcgbW9kZSBjb250cm9sCgpzZXQgTF9TQ1IzLAkJTFYrMjgJCQkjIGludGVnZXIgc2NyYXRjaCAzCnNldCBMX1NDUjIsCQlMVisyNAkJCSMgaW50ZWdlciBzY3JhdGNoIDIKc2V0IExfU0NSMSwJCUxWKzIwCQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMQoKc2V0IFNUT1JFX0ZMRywJCUxWKzE5CQkJIyBmbGFnOiBvcGVyYW5kIHN0b3JlIChpZS4gbm90IGZjbXAvZnRzdCkKCnNldCBFWENfVEVNUDIsCQlMVisyNAkJCSMgdGVtcG9yYXJ5IHNwYWNlCnNldCBFWENfVEVNUCwJCUxWKzE2CQkJIyB0ZW1wb3Jhcnkgc3BhY2UKCnNldCBEVEFHLAkJTFYrMTUJCQkjIGRlc3RpbmF0aW9uIG9wZXJhbmQgdHlwZQpzZXQgU1RBRywJCUxWKzE0CQkJIyBzb3VyY2Ugb3BlcmFuZCB0eXBlCgpzZXQgU1BDT05EX0ZMRywJCUxWKzEwCQkJIyBmbGFnOiBzcGVjaWFsIGNhc2UgKHNlZSBiZWxvdykKCnNldCBFWENfQ0MsCQlMVis4CQkJIyBzYXZlZCBjb25kaXRpb24gY29kZXMKc2V0IEVYQ19FWFRXUFRSLAlMVis0CQkJIyBzYXZlZCBjdXJyZW50IFBDIChhY3RpdmUpCnNldCBFWENfRVhUV09SRCwJTFYrMgkJCSMgc2F2ZWQgZXh0ZW5zaW9uIHdvcmQKc2V0IEVYQ19DTURSRUcsCQlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZApzZXQgRVhDX09QV09SRCwJCUxWKzAJCQkjIHNhdmVkIG9wZXJhdGlvbiB3b3JkCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBIZWxwZnVsIG1hY3JvcwoKc2V0IEZURU1QLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4Kc2V0IEZURU1QX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCnNldCBGVEVNUF9TR04sCQkyCQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCnNldCBGVEVNUF9ISSwJCTQKc2V0IEZURU1QX0xPLAkJOApzZXQgRlRFTVBfR1JTLAkJMTIKCnNldCBMT0NBTCwJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCnNldCBMT0NBTF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgpzZXQgTE9DQUxfU0dOLAkJMgkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5LgpzZXQgTE9DQUxfSEksCQk0CnNldCBMT0NBTF9MTywJCTgKc2V0IExPQ0FMX0dSUywJCTEyCgpzZXQgRFNULAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4Kc2V0IERTVF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgpzZXQgRFNUX0hJLAkJNAkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5LgpzZXQgRFNUX0xPLAkJOAoKc2V0IFNSQywJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCnNldCBTUkNfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24Kc2V0IFNSQ19ISSwJCTQJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4Kc2V0IFNSQ19MTywJCTgKCnNldCBTR0xfTE8sCQkweDNmODEJCQkjIG1pbiBzZ2wgcHJlYyBleHBvbmVudApzZXQgU0dMX0hJLAkJMHg0MDdlCQkJIyBtYXggc2dsIHByZWMgZXhwb25lbnQKc2V0IERCTF9MTywJCTB4M2MwMQkJCSMgbWluIGRibCBwcmVjIGV4cG9uZW50CnNldCBEQkxfSEksCQkweDQzZmUJCQkjIG1heCBkYmwgcHJlYyBleHBvbmVudApzZXQgRVhUX0xPLAkJMHgwCQkJIyBtaW4gZXh0IHByZWMgZXhwb25lbnQKc2V0IEVYVF9ISSwJCTB4N2ZmZQkJCSMgbWF4IGV4dCBwcmVjIGV4cG9uZW50CgpzZXQgRVhUX0JJQVMsCQkweDNmZmYJCQkjIGV4dGVuZGVkIHByZWNpc2lvbiBiaWFzCnNldCBTR0xfQklBUywJCTB4MDA3ZgkJCSMgc2luZ2xlIHByZWNpc2lvbiBiaWFzCnNldCBEQkxfQklBUywJCTB4MDNmZgkJCSMgZG91YmxlIHByZWNpc2lvbiBiaWFzCgpzZXQgTk9STSwJCTB4MDAJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCnNldCBaRVJPLAkJMHgwMQkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKc2V0IElORiwJCTB4MDIJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCnNldCBRTkFOLAkJMHgwMwkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKc2V0IERFTk9STSwJCTB4MDQJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCnNldCBTTkFOLAkJMHgwNQkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKc2V0IFVOTk9STSwJCTB4MDYJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCgojIyMjIyMjIyMjIyMjIyMjIyMKIyBGUFNSL0ZQQ1IgYml0cyAjCiMjIyMjIyMjIyMjIyMjIyMjIwpzZXQgbmVnX2JpdCwJCTB4MwkJCSMgbmVnYXRpdmUgcmVzdWx0CnNldCB6X2JpdCwJCTB4MgkJCSMgemVybyByZXN1bHQKc2V0IGluZl9iaXQsCQkweDEJCQkjIGluZmluaXRlIHJlc3VsdApzZXQgbmFuX2JpdCwJCTB4MAkJCSMgTkFOIHJlc3VsdAoKc2V0IHFfc25fYml0LAkJMHg3CQkJIyBzaWduIGJpdCBvZiBxdW90aWVudCBieXRlCgpzZXQgYnN1bl9iaXQsCQk3CQkJIyBicmFuY2ggb24gdW5vcmRlcmVkCnNldCBzbmFuX2JpdCwJCTYJCQkjIHNpZ25hbGxpbmcgTkFOCnNldCBvcGVycl9iaXQsCQk1CQkJIyBvcGVyYW5kIGVycm9yCnNldCBvdmZsX2JpdCwJCTQJCQkjIG92ZXJmbG93CnNldCB1bmZsX2JpdCwJCTMJCQkjIHVuZGVyZmxvdwpzZXQgZHpfYml0LAkJMgkJCSMgZGl2aWRlIGJ5IHplcm8Kc2V0IGluZXgyX2JpdCwJCTEJCQkjIGluZXhhY3QgcmVzdWx0IDIKc2V0IGluZXgxX2JpdCwJCTAJCQkjIGluZXhhY3QgcmVzdWx0IDEKCnNldCBhaW9wX2JpdCwJCTcJCQkjIGFjY3J1ZWQgaW5leGFjdCBvcGVyYXRpb24gYml0CnNldCBhb3ZmbF9iaXQsCQk2CQkJIyBhY2NydWVkIG92ZXJmbG93IGJpdApzZXQgYXVuZmxfYml0LAkJNQkJCSMgYWNjcnVlZCB1bmRlcmZsb3cgYml0CnNldCBhZHpfYml0LAkJNAkJCSMgYWNjcnVlZCBkeiBiaXQKc2V0IGFpbmV4X2JpdCwJCTMJCQkjIGFjY3J1ZWQgaW5leGFjdCBiaXQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRlBTUiBpbmRpdmlkdWFsIGJpdCBtYXNrcyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNldCBuZWdfbWFzaywJCTB4MDgwMDAwMDAJCSMgbmVnYXRpdmUgYml0IG1hc2sgKGx3KQpzZXQgaW5mX21hc2ssCQkweDAyMDAwMDAwCQkjIGluZmluaXR5IGJpdCBtYXNrIChsdykKc2V0IHpfbWFzaywJCTB4MDQwMDAwMDAJCSMgemVybyBiaXQgbWFzayAobHcpCnNldCBuYW5fbWFzaywJCTB4MDEwMDAwMDAJCSMgbmFuIGJpdCBtYXNrIChsdykKCnNldCBuZWdfYm1hc2ssCQkweDA4CQkJIyBuZWdhdGl2ZSBiaXQgbWFzayAoYnl0ZSkKc2V0IGluZl9ibWFzaywJCTB4MDIJCQkjIGluZmluaXR5IGJpdCBtYXNrIChieXRlKQpzZXQgel9ibWFzaywJCTB4MDQJCQkjIHplcm8gYml0IG1hc2sgKGJ5dGUpCnNldCBuYW5fYm1hc2ssCQkweDAxCQkJIyBuYW4gYml0IG1hc2sgKGJ5dGUpCgpzZXQgYnN1bl9tYXNrLAkJMHgwMDAwODAwMAkJIyBic3VuIGV4Y2VwdGlvbiBtYXNrCnNldCBzbmFuX21hc2ssCQkweDAwMDA0MDAwCQkjIHNuYW4gZXhjZXB0aW9uIG1hc2sKc2V0IG9wZXJyX21hc2ssCQkweDAwMDAyMDAwCQkjIG9wZXJyIGV4Y2VwdGlvbiBtYXNrCnNldCBvdmZsX21hc2ssCQkweDAwMDAxMDAwCQkjIG92ZXJmbG93IGV4Y2VwdGlvbiBtYXNrCnNldCB1bmZsX21hc2ssCQkweDAwMDAwODAwCQkjIHVuZGVyZmxvdyBleGNlcHRpb24gbWFzawpzZXQgZHpfbWFzaywJCTB4MDAwMDA0MDAJCSMgZHogZXhjZXB0aW9uIG1hc2sKc2V0IGluZXgyX21hc2ssCQkweDAwMDAwMjAwCQkjIGluZXgyIGV4Y2VwdGlvbiBtYXNrCnNldCBpbmV4MV9tYXNrLAkJMHgwMDAwMDEwMAkJIyBpbmV4MSBleGNlcHRpb24gbWFzawoKc2V0IGFpb3BfbWFzaywJCTB4MDAwMDAwODAJCSMgYWNjcnVlZCBpbGxlZ2FsIG9wZXJhdGlvbgpzZXQgYW92ZmxfbWFzaywJCTB4MDAwMDAwNDAJCSMgYWNjcnVlZCBvdmVyZmxvdwpzZXQgYXVuZmxfbWFzaywJCTB4MDAwMDAwMjAJCSMgYWNjcnVlZCB1bmRlcmZsb3cKc2V0IGFkel9tYXNrLAkJMHgwMDAwMDAxMAkJIyBhY2NydWVkIGRpdmlkZSBieSB6ZXJvCnNldCBhaW5leF9tYXNrLAkJMHgwMDAwMDAwOAkJIyBhY2NydWVkIGluZXhhY3QKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRlBTUiBjb21iaW5hdGlvbnMgdXNlZCBpbiB0aGUgRlBTUCAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNldCBkemluZl9tYXNrLAkJaW5mX21hc2srZHpfbWFzaythZHpfbWFzawpzZXQgb3BuYW5fbWFzaywJCW5hbl9tYXNrK29wZXJyX21hc2srYWlvcF9tYXNrCnNldCBuemlfbWFzaywJCTB4MDFmZmZmZmYJCSNjbGVhcnMgTiwgWiwgYW5kIEkKc2V0IHVuZmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKc2V0IHVuZjJpbnhfbWFzaywJdW5mbF9tYXNrK2luZXgyX21hc2srYWluZXhfbWFzawpzZXQgb3ZmaW54X21hc2ssCW92ZmxfbWFzaytpbmV4Ml9tYXNrK2FvdmZsX21hc2srYWluZXhfbWFzawpzZXQgaW54MWFfbWFzaywJCWluZXgxX21hc2srYWluZXhfbWFzawpzZXQgaW54MmFfbWFzaywJCWluZXgyX21hc2srYWluZXhfbWFzawpzZXQgc25hbmlvcF9tYXNrLAluYW5fbWFzaytzbmFuX21hc2srYWlvcF9tYXNrCnNldCBzbmFuaW9wMl9tYXNrLAlzbmFuX21hc2srYWlvcF9tYXNrCnNldCBuYW5pb3BfbWFzaywJbmFuX21hc2srYWlvcF9tYXNrCnNldCBuZWdpbmZfbWFzaywJbmVnX21hc2sraW5mX21hc2sKc2V0IGluZmFpb3BfbWFzaywJaW5mX21hc2srYWlvcF9tYXNrCnNldCBuZWd6X21hc2ssCQluZWdfbWFzayt6X21hc2sKc2V0IG9wYW9wX21hc2ssCQlvcGVycl9tYXNrK2Fpb3BfbWFzawpzZXQgdW5mbF9pbnhfbWFzaywJdW5mbF9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzawpzZXQgb3ZmbF9pbnhfbWFzaywJb3ZmbF9tYXNrK2FvdmZsX21hc2srYWluZXhfbWFzawoKIyMjIyMjIyMjCiMgbWlzYy4gIwojIyMjIyMjIyMKc2V0IHJuZF9zdGt5X2JpdCwJMjkJCQkjIHN0a3kgYml0IHBvcyBpbiBsb25nd29yZAoKc2V0IHNpZ25fYml0LAkJMHg3CQkJIyBzaWduIGJpdApzZXQgc2lnbmFuX2JpdCwJCTB4NgkJCSMgc2lnbmFsbGluZyBuYW4gYml0CgpzZXQgc2dsX3RocmVzaCwJCTB4M2Y4MQkJCSMgbWluaW11bSBzZ2wgZXhwb25lbnQKc2V0IGRibF90aHJlc2gsCQkweDNjMDEJCQkjIG1pbmltdW0gZGJsIGV4cG9uZW50CgpzZXQgeF9tb2RlLAkJMHgwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24Kc2V0IHNfbW9kZSwJCTB4NAkJCSMgc2luZ2xlIHByZWNpc2lvbgpzZXQgZF9tb2RlLAkJMHg4CQkJIyBkb3VibGUgcHJlY2lzaW9uCgpzZXQgcm5fbW9kZSwJCTB4MAkJCSMgcm91bmQtdG8tbmVhcmVzdApzZXQgcnpfbW9kZSwJCTB4MQkJCSMgcm91bmQtdG8temVybwpzZXQgcm1fbW9kZSwJCTB4MgkJCSMgcm91bmQtdHAtbWludXMtaW5maW5pdHkKc2V0IHJwX21vZGUsCQkweDMJCQkjIHJvdW5kLXRvLXBsdXMtaW5maW5pdHkKCnNldCBtYW50aXNzYWxlbiwJNjQJCQkjIGxlbmd0aCBvZiBtYW50aXNzYSBpbiBiaXRzCgpzZXQgQllURSwJCTEJCQkjIGxlbihieXRlKSA9PSAxIGJ5dGUKc2V0IFdPUkQsCQkyCQkJIyBsZW4od29yZCkgPT0gMiBieXRlcwpzZXQgTE9ORywJCTQJCQkjIGxlbihsb25nd29yZCkgPT0gMiBieXRlcwoKc2V0IEJTVU5fVkVDLAkJMHhjMAkJCSMgYnN1biAgICB2ZWN0b3Igb2Zmc2V0CnNldCBJTkVYX1ZFQywJCTB4YzQJCQkjIGluZXhhY3QgdmVjdG9yIG9mZnNldApzZXQgRFpfVkVDLAkJMHhjOAkJCSMgZHogICAgICB2ZWN0b3Igb2Zmc2V0CnNldCBVTkZMX1ZFQywJCTB4Y2MJCQkjIHVuZmwgICAgdmVjdG9yIG9mZnNldApzZXQgT1BFUlJfVkVDLAkJMHhkMAkJCSMgb3BlcnIgICB2ZWN0b3Igb2Zmc2V0CnNldCBPVkZMX1ZFQywJCTB4ZDQJCQkjIG92ZmwgICAgdmVjdG9yIG9mZnNldApzZXQgU05BTl9WRUMsCQkweGQ4CQkJIyBzbmFuICAgIHZlY3RvciBvZmZzZXQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNQZWNpYWwgQ09ORGl0aW9uIEZMYUdzICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNldCBmdHJhcGNjX2ZsZywJMHgwMQkJCSMgZmxhZyBiaXQ6IGZ0cmFwY2MgZXhjZXB0aW9uCnNldCBmYnN1bl9mbGcsCQkweDAyCQkJIyBmbGFnIGJpdDogYnN1biBleGNlcHRpb24Kc2V0IG1pYTdfZmxnLAkJMHgwNAkJCSMgZmxhZyBiaXQ6IChhNykrIDxlYT4Kc2V0IG1kYTdfZmxnLAkJMHgwOAkJCSMgZmxhZyBiaXQ6IC0oYTcpIDxlYT4Kc2V0IGZtb3ZtX2ZsZywJCTB4NDAJCQkjIGZsYWcgYml0OiBmbW92bSBpbnN0cnVjdGlvbgpzZXQgaW1tZWRfZmxnLAkJMHg4MAkJCSMgZmxhZyBiaXQ6ICY8ZGF0YT4gPGVhPgoKc2V0IGZ0cmFwY2NfYml0LAkweDAKc2V0IGZic3VuX2JpdCwJCTB4MQpzZXQgbWlhN19iaXQsCQkweDIKc2V0IG1kYTdfYml0LAkJMHgzCnNldCBpbW1lZF9iaXQsCQkweDcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUUkFOU0NFTkRFTlRBTCAiTEFTVC1PUCIgRkxBR1MgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNldCBGTVVMX09QLAkJMHgwCQkJIyBmbXVsIGluc3RyIHBlcmZvcm1lZCBsYXN0CnNldCBGRElWX09QLAkJMHgxCQkJIyBmZGl2IHBlcmZvcm1lZCBsYXN0CnNldCBGQUREX09QLAkJMHgyCQkJIyBmYWRkIHBlcmZvcm1lZCBsYXN0CnNldCBGTU9WX09QLAkJMHgzCQkJIyBmbW92IHBlcmZvcm1lZCBsYXN0CgojIyMjIyMjIyMjIyMjCiMgQ09OU1RBTlRTICMKIyMjIyMjIyMjIyMjIwpUMToJbG9uZwkJMHg0MEM2MkQzOCwweEQzRDY0NjM0CSMgMTYzODEgTE9HMiBMRUFEClQyOglsb25nCQkweDNENkY5MEFFLDB4QjFFNzVDQzcJIyAxNjM4MSBMT0cyIFRSQUlMCgpQSToJbG9uZwkJMHg0MDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMApQSUJZMjoJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAoKVFdPQllQSToKCWxvbmcJCTB4M0ZFNDVGMzAsMHg2REM5Qzg4MwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Zwc3Bfb3ZmbCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBPdmVyZmxvdyBleGNlcHRpb24uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgT3ZlcmZsb3cgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIwojCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIwojCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCiMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIwojCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIwojCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCiMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciAwNjBGUFNQIGV4aXQgKGFsbCB3b3JrIGRvbmUhKQkjCiMJX3JlYWxfb3ZmbCgpIC0gImNhbGxvdXQiIGZvciBPdmVyZmxvdyBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgZm9yIEluZXhhY3QgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCiMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZXhjZXB0aW9uIGNvZGUJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgT3ZmbCBleGNlcHRpb24gc3RhY2sgZnJhbWUJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU92ZXJmbG93IEV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCiMJT3ZlcmZsb3cgRXhjZXB0aW9uIGRpc2FibGVkOgkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKIwktIFRoZSAiZXhjZXB0aW9uIHByZXNlbnQiIGZsYWcgaW4gdGhlIGZzYXZlIGZyYW1lIGlzIGNsZWFyZWQJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJT24gdGhlIDA2MCwgaWYgYW4gRlAgb3ZlcmZsb3cgaXMgcHJlc2VudCBhcyB0aGUgcmVzdWx0IG9mIGFueQkjCiMgaW5zdHJ1Y3Rpb24sIHRoZSAwNjAgd2lsbCB0YWtlIGFuIG92ZXJmbG93IGV4Y2VwdGlvbiB3aGV0aGVyIHRoZQkjCiMgZXhjZXB0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIEZQQ1IuIEZvciB0aGUgZGlzYWJsZWQgY2FzZSwJIwojIFRoaXMgaGFuZGxlciBlbXVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QJIwojIGRlZmF1bHQgcmVzdWx0IHNob3VsZCBiZSBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBkZWZhdWx0IHJlc3VsdCBpcwkjCiMgdGhlbiBzdG9yZWQgaW4gZWl0aGVyIHRoZSBGUCByZWdmaWxlLCBkYXRhIHJlZ2ZpbGUsIG9yIG1lbW9yeS4JIwojIEZpbmFsbHksIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfZnBzcF9kb25lKCkJCSMKIyBkZW5vdGluZyB0aGF0IG5vIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgZXhpc3Qgd2l0aGluIHRoZSBtYWNoaW5lLgkjCiMJSWYgdGhlIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoaXMgaGFuZGxlciBtdXN0IGNyZWF0ZSB0aGUJIwojIGV4Y2VwdGlvbmFsIG9wZXJhbmQgYW5kIHBsYXZlIGl0IGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSwgYW5kIHN0b3JlCSMKIyB0aGUgZGVmYXVsdCByZXN1bHQgKG9ubHkgaWYgdGhlIGluc3RydWN0aW9uIGlzIG9wY2xhc3MgMykuIEZvcgkjCiMgZXhjZXB0aW9ucyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IgkjCiMgX3JlYWxfb3ZmbCgpIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZW5hYmxlZCBvdmVyZmxvdyBoYW5kbGVyCSMKIyBjYW4gaGFuZGxlIHRoaXMgY2FzZS4JCQkJCQkJIwojCVR3byBvdGhlciBjb25kaXRpb25zIGV4aXN0LiBGaXJzdCwgaWYgb3ZlcmZsb3cgd2FzIGRpc2FibGVkCSMKIyBidXQgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0CQkjCiMgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX2luZXgoKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHJlc3VsdAkjCiMgd2FzIGluZXhhY3QuCQkJCQkJCQkjCiMJQWxzbywgaW4gdGhlIGNhc2Ugb2YgYW4gb3BjbGFzcyB0aHJlZSBpbnN0cnVjdGlvbiB3aGVyZQkJIwojIG92ZXJmbG93IHdhcyBkaXNhYmxlZCBhbmQgdGhlIHRyYWNlIGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCwgdGhpcwkjCiMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX3RyYWNlKCkuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9mcHNwX292ZmwKX2Zwc3Bfb3ZmbDoKCiMkIwlzdWIubAkJJjI0LCVzcAkJCSMgbWFrZSByb29tIGZvciBzcmMvZHN0CgoJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQoKCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCgojIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWJ0c3QJCSYweDUsRVhDX0NNRFJFRyglYTYpCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PwoJYm5lLncJCWZvdmZsX291dAoKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAoKIyBzaW5jZSwgSSBiZWxpZXZlLCBvbmx5IE5PUk1zIGFuZCBERU5PUk1zIGNhbiBjb21lIHRocm91Z2ggaGVyZSwKIyBtYXliZSB3ZSBjYW4gYXZvaWQgdGhlIHN1YnJvdXRpbmUgY2FsbC4KCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCgojIGJpdCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCiMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3Bfb3ZmbCgpLiByZW1lbWJlciB0aGF0IGZjbXAsIGZ0c3QsIGFuZCBmc2luY29zCiMgd2lsbCBuZXZlciB0YWtlIHRoaXMgZXhjZXB0aW9uLgoJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KCWJlcS5iCQlmb3ZmbF9leHRyYWN0CQkjIG1vbmFkaWMKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKCglsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZvdmZsX29wMl9kb25lCQkjIG5vCglic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTwpmb3ZmbF9vcDJfZG9uZToKCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKCmZvdmZsX2V4dHJhY3Q6CgojJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQojJCMJbW92LmwJCUZQX0RTVF9FWCglYTYpLFRSQVBfRFNUT1BfRVgoJWE2KQojJCMJbW92LmwJCUZQX0RTVF9ISSglYTYpLFRSQVBfRFNUT1BfSEkoJWE2KQojJCMJbW92LmwJCUZQX0RTVF9MTyglYTYpLFRSQVBfRFNUT1BfTE8oJWE2KQoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCgoJYW5kaS5sCQkmMHgwMGZmMDFmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKCWZtb3YubAkJJjB4MCwlZnBzcgoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCglsZWEJCUZQX0RTVCglYTYpLCVhMQoKIyBtYXliZSB3ZSBjYW4gbWFrZSB0aGVzZSBlbnRyeSBwb2ludHMgT05MWSB0aGUgT1ZGTCBlbnRyeSBwb2ludHMgb2YgZWFjaCByb3V0aW5lLgoJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgoJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQoKIyB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIGVtdWxhdGVkLiB0aGUgcmVzdWx0IGlzIGluIGZwMC4KIyB0aGUgRVhPUCwgaWYgYW4gZXhjZXB0aW9uIG9jY3VycmVkLCBpcyBpbiBmcDEuCiMgd2UgbXVzdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKIyB0cmFwcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKCWJzci5sCQlzdG9yZV9mcHJlZwoKIyB0aGUgZXhjZXB0aW9uYWwgcG9zc2liaWxpdGllcyB3ZSBoYXZlIGxlZnQgb3Vyc2VsdmVzIHdpdGggYXJlIE9OTFkgb3ZlcmZsb3cKIyBhbmQgaW5leGFjdC4gYW5kLCB0aGUgaW5leGFjdCBpcyBzdWNoIHRoYXQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIHdhcyBkaXNhYmxlZAojIGJ1dCBpbmV4YWN0IHdhcyBlbmFibGVkLgoJYnRzdAkJJm92ZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS5iCQlmb3ZmbF9vdmZsX29uCgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCglibmUuYgkJZm92ZmxfaW5leF9vbgoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKIyQjCWFkZC5sCQkmMjQsJXNwCglicmEubAkJX2Zwc3BfZG9uZQoKIyBvdmVyZmxvdyBpcyBlbmFibGVkIEFORCBvdmVyZmxvdywgb2YgY291cnNlLCBvY2N1cnJlZC4gc28sIHdlIGhhdmUgdGhlIEVYT1AKIyBpbiBmcDEuIG5vdywgc2ltcGx5IGp1bXAgdG8gX3JlYWxfb3ZmbCgpIQpmb3ZmbF9vdmZsX29uOgoJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgKGZwMSkgdG8gc3RhY2sKCgltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQoKCXVubGsJCSVhNgoKCWJyYS5sCQlfcmVhbF9vdmZsCgojIG92ZXJmbG93IG9jY3VycmVkIGJ1dCBpcyBkaXNhYmxlZC4gbWVhbndoaWxlLCBpbmV4YWN0IGlzIGVuYWJsZWQuIHRoZXJlZm9yZSwKIyB3ZSBtdXN0IGp1bXAgdG8gcmVhbF9pbmV4KCkuCmZvdmZsX2luZXhfb246CgoJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgKGZwMSkgdG8gc3RhY2sKCgltb3YuYgkJJjB4YzQsMStFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9yZWFsX2luZXgKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmb3ZmbF9vdXQ6CgoKIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKCiMgdGhlIHNyYyBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYSBOT1JNKCEpLCBzbyB0YWcgaXQgYXMgc3VjaAoJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCgoJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKCglic3IubAkJZm91dAoKCWJ0c3QJCSZvdmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCglibmUudwkJZm92Zmxfb3ZmbF9vbgoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQoJYm5lLncJCWZvdmZsX2luZXhfb24KCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CiMkIwlhZGQubAkJJjI0LCVzcAoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CgliZXEubAkJX2Zwc3BfZG9uZQkJIyBubwoKCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjICJDdXJyZW50IFBDIiBpcyBpbiBGUElBUgoJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKCWJyYS5sCQlfcmVhbF90cmFjZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Zwc3BfdW5mbCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBVbmRlcmZsb3cgZXhjZXB0aW9uLgkjCiMJCQkJCQkJCQkjCiMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIwojCUZQIFVuZGVyZmxvdyBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIwojCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCiMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIwojCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCiMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCiMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIDA2MEZQU1AgZXhpdCAoYWxsIHdvcmsgZG9uZSEpCSMKIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE92ZXJmbG93IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIwojCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiBmb3IgSW5leGFjdCBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBleGNlcHRpb24gY29kZQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBVbmZsIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVW5kZXJmbG93IEV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCiMJVW5kZXJmbG93IEV4Y2VwdGlvbiBkaXNhYmxlZDoJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCiMJLSBUaGUgImV4Y2VwdGlvbiBwcmVzZW50IiBmbGFnIGluIHRoZSBmc2F2ZSBmcmFtZSBpcyBjbGVhcmVkCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU9uIHRoZSAwNjAsIGlmIGFuIEZQIHVuZGVyZmxvdyBpcyBwcmVzZW50IGFzIHRoZSByZXN1bHQgb2YgYW55CSMKIyBpbnN0cnVjdGlvbiwgdGhlIDA2MCB3aWxsIHRha2UgYW4gdW5kZXJmbG93IGV4Y2VwdGlvbiB3aGV0aGVyIHRoZQkjCiMgZXhjZXB0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIEZQQ1IuIEZvciB0aGUgZGlzYWJsZWQgY2FzZSwJIwojIFRoaXMgaGFuZGxlciBlbXVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QJIwojIGRlZmF1bHQgcmVzdWx0IHNob3VsZCBiZSBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBkZWZhdWx0IHJlc3VsdCBpcwkjCiMgdGhlbiBzdG9yZWQgaW4gZWl0aGVyIHRoZSBGUCByZWdmaWxlLCBkYXRhIHJlZ2ZpbGUsIG9yIG1lbW9yeS4JIwojIEZpbmFsbHksIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfZnBzcF9kb25lKCkJCSMKIyBkZW5vdGluZyB0aGF0IG5vIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgZXhpc3Qgd2l0aGluIHRoZSBtYWNoaW5lLgkjCiMJSWYgdGhlIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoaXMgaGFuZGxlciBtdXN0IGNyZWF0ZSB0aGUJIwojIGV4Y2VwdGlvbmFsIG9wZXJhbmQgYW5kIHBsYXZlIGl0IGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSwgYW5kIHN0b3JlCSMKIyB0aGUgZGVmYXVsdCByZXN1bHQgKG9ubHkgaWYgdGhlIGluc3RydWN0aW9uIGlzIG9wY2xhc3MgMykuIEZvcgkjCiMgZXhjZXB0aW9ucyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IgkjCiMgX3JlYWxfdW5mbCgpIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZW5hYmxlZCBvdmVyZmxvdyBoYW5kbGVyCSMKIyBjYW4gaGFuZGxlIHRoaXMgY2FzZS4JCQkJCQkJIwojCVR3byBvdGhlciBjb25kaXRpb25zIGV4aXN0LiBGaXJzdCwgaWYgdW5kZXJmbG93IHdhcyBkaXNhYmxlZAkjCiMgYnV0IHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCBhbmQgdGhlIHJlc3VsdCB3YXMgaW5leGFjdCwJIwojIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX2luZXgoKS4JCSMKIyB3YXMgaW5leGFjdC4JCQkJCQkJCSMKIwlBbHNvLCBpbiB0aGUgY2FzZSBvZiBhbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9uIHdoZXJlCQkjCiMgdW5kZXJmbG93IHdhcyBkaXNhYmxlZCBhbmQgdGhlIHRyYWNlIGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCwgdGhpcwkjCiMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX3RyYWNlKCkuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9mcHNwX3VuZmwKX2Zwc3BfdW5mbDoKCiMkIwlzdWIubAkJJjI0LCVzcAkJCSMgbWFrZSByb29tIGZvciBzcmMvZHN0CgoJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQoKCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCgojIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWJ0c3QJCSYweDUsRVhDX0NNRFJFRyglYTYpCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PwoJYm5lLncJCWZ1bmZsX291dAoKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCgojIGJpdCBmaXZlIG9mIHRoZSBmcCBleHQgd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCiMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3BfdW5mbCgpLiByZW1lbWJlciB0aGF0IGZjbXAsIGFuZCBmdHN0CiMgd2lsbCBuZXZlciB0YWtlIHRoaXMgZXhjZXB0aW9uLgoJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wIG1vbmFkaWMgb3IgZHlhZGljPwoJYmVxLmIJCWZ1bmZsX2V4dHJhY3QJCSMgbW9uYWRpYwoKIyBub3csIHdoYXQncyBsZWZ0IHRoYXQncyBub3QgZHlhZGljIGlzIGZzaW5jb3MuIHdlIGNhbiBkaXN0aW5ndWlzaCBpdAojIGZyb20gYWxsIGR5YWRpY3MgYnkgdGhlICcwMTEweHh4IHBhdHRlcm4KCWJ0c3QJCSYweDQsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcCBhbiBmc2luY29zPwoJYm5lLmIJCWZ1bmZsX2V4dHJhY3QJCSMgeWVzCgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCglic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCgoJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAoJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQoJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KCWJuZS5iCQlmdW5mbF9vcDJfZG9uZQkJIyBubwoJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KZnVuZmxfb3AyX2RvbmU6Cgltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCgpmdW5mbF9leHRyYWN0OgoKIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKIyQjCW1vdi5sCQlGUF9EU1RfRVgoJWE2KSxUUkFQX0RTVE9QX0VYKCVhNikKIyQjCW1vdi5sCQlGUF9EU1RfSEkoJWE2KSxUUkFQX0RTVE9QX0hJKCVhNikKIyQjCW1vdi5sCQlGUF9EU1RfTE8oJWE2KSxUUkFQX0RTVE9QX0xPKCVhNikKCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCgoJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQoJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgoKCWFuZGkubAkJJjB4MDBmZjAxZmYsVVNFUl9GUFNSKCVhNikKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWxlYQkJRlBfRFNUKCVhNiksJWExCgojIG1heWJlIHdlIGNhbiBtYWtlIHRoZXNlIGVudHJ5IHBvaW50cyBPTkxZIHRoZSBPVkZMIGVudHJ5IHBvaW50cyBvZiBlYWNoIHJvdXRpbmUuCgltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCglqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAoJYnNyLmwJCXN0b3JlX2ZwcmVnCgojIFRoZSBgMDYwIEZQVSBtdWx0aXBsaWVyIGhhcmR3YXJlIGlzIHN1Y2ggdGhhdCBpZiB0aGUgcmVzdWx0IG9mIGEKIyBtdWx0aXBseSBvcGVyYXRpb24gaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG5vcm1hbGl6ZWQgbnVtYmVyCiMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgojIHVuZGVyZmxvdyBleGNlcHRpb24uIFNpbmNlIHRoaXMgaXMgaW5jb3JyZWN0LCB3ZSBuZWVkIHRvIGNoZWNrCiMgaWYgb3VyIGVtdWxhdGlvbiwgYWZ0ZXIgcmUtZG9pbmcgdGhlIG9wZXJhdGlvbiwgZGVjaWRlZCB0aGF0CiMgbm8gdW5kZXJmbG93IHdhcyBjYWxsZWQgZm9yLiBXZSBkbyB0aGVzZSBjaGVja3Mgb25seSBpbgojIGZ1bmZsX3t1bmZsLGluZXh9X29uKCkgYmVjYXVzZSB3LyBib3RoIGV4Y2VwdGlvbnMgZGlzYWJsZWQsIHRoaXMKIyBzcGVjaWFsIGNhc2Ugd2lsbCBzaW1wbHkgZXhpdCBncmFjZWZ1bGx5IHdpdGggdGhlIGNvcnJlY3QgcmVzdWx0LgoKIyB0aGUgZXhjZXB0aW9uYWwgcG9zc2liaWxpdGllcyB3ZSBoYXZlIGxlZnQgb3Vyc2VsdmVzIHdpdGggYXJlIE9OTFkgb3ZlcmZsb3cKIyBhbmQgaW5leGFjdC4gYW5kLCB0aGUgaW5leGFjdCBpcyBzdWNoIHRoYXQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIHdhcyBkaXNhYmxlZAojIGJ1dCBpbmV4YWN0IHdhcyBlbmFibGVkLgoJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS5iCQlmdW5mbF91bmZsX29uCgpmdW5mbF9jaGtpbmV4OgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCglibmUuYgkJZnVuZmxfaW5leF9vbgoKZnVuZmxfZXhpdDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKIyQjCWFkZC5sCQkmMjQsJXNwCglicmEubAkJX2Zwc3BfZG9uZQoKIyBvdmVyZmxvdyBpcyBlbmFibGVkIEFORCBvdmVyZmxvdywgb2YgY291cnNlLCBvY2N1cnJlZC4gc28sIHdlIGhhdmUgdGhlIEVYT1AKIyBpbiBmcDEgKGRvbid0IGZvcmdldCB0byBzYXZlIGZwMCkuIHdoYXQgdG8gZG8gbm93PwojIHdlbGwsIHdlIHNpbXBseSBoYXZlIHRvIGdldCB0byBnbyB0byBfcmVhbF91bmZsKCkhCmZ1bmZsX3VuZmxfb246CgojIFRoZSBgMDYwIEZQVSBtdWx0aXBsaWVyIGhhcmR3YXJlIGlzIHN1Y2ggdGhhdCBpZiB0aGUgcmVzdWx0IG9mIGEKIyBtdWx0aXBseSBvcGVyYXRpb24gaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG5vcm1hbGl6ZWQgbnVtYmVyCiMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgojIHVuZGVyZmxvdyBleGNlcHRpb24uIFNpbmNlIHRoaXMgaXMgaW5jb3JyZWN0LCB3ZSBjaGVjayBoZXJlIHRvIHNlZQojIGlmIG91ciBlbXVsYXRpb24sIGFmdGVyIHJlLWRvaW5nIHRoZSBvcGVyYXRpb24sIGRlY2lkZWQgdGhhdAojIG5vIHVuZGVyZmxvdyB3YXMgY2FsbGVkIGZvci4KCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpCgliZXEudwkJZnVuZmxfY2hraW5leAoKZnVuZmxfdW5mbF9vbjI6CglmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCAoZnAxKSB0byBzdGFjawoKCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9yZWFsX3VuZmwKCiMgdW5kZWZsb3cgb2NjdXJyZWQgYnV0IGlzIGRpc2FibGVkLiBtZWFud2hpbGUsIGluZXhhY3QgaXMgZW5hYmxlZC4gdGhlcmVmb3JlLAojIHdlIG11c3QganVtcCB0byByZWFsX2luZXgoKS4KZnVuZmxfaW5leF9vbjoKCiMgVGhlIGAwNjAgRlBVIG11bHRpcGxpZXIgaGFyZHdhcmUgaXMgc3VjaCB0aGF0IGlmIHRoZSByZXN1bHQgb2YgYQojIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKIyAoMHgwMDAwMDAwMF84MDAwMDAwMF8wMDAwMDAwMCksIHRoZW4gdGhlIG1hY2hpbmUgd2lsbCB0YWtlIGFuCiMgdW5kZXJmbG93IGV4Y2VwdGlvbi4KIyBCdXQsIHdoZXRoZXIgYm9ndXMgb3Igbm90LCBpZiBpbmV4YWN0IGlzIGVuYWJsZWQgQU5EIGl0IG9jY3VycmVkLAojIHRoZW4gd2UgaGF2ZSB0byBicmFuY2ggdG8gcmVhbF9pbmV4LgoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQoJYmVxLncJCWZ1bmZsX2V4aXQKCmZ1bmZsX2luZXhfb24yOgoKCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHN0YWNrCgoJbW92LmIJCSYweGM0LDErRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGM0Cgltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQoKCXVubGsJCSVhNgoKCWJyYS5sCQlfcmVhbF9pbmV4CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmdW5mbF9vdXQ6CgoKIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKCiMgdGhlIHNyYyBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYSBOT1JNKCEpLCBzbyB0YWcgaXQgYXMgc3VjaAoJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCgoJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKCglic3IubAkJZm91dAoKCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCglibmUudwkJZnVuZmxfdW5mbF9vbjIKCglidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS53CQlmdW5mbF9pbmV4X29uMgoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKIyQjCWFkZC5sCQkmMjQsJXNwCgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCgoJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAoJYnJhLmwJCV9yZWFsX3RyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF91bnN1cHAoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgIlVuaW1wbGVtZW50ZWQJIwojCQkgICAgICAgIERhdGEgVHlwZSIgZXhjZXB0aW9uLgkJCQkjCiMJCQkJCQkJCQkjCiMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIwojCUZQIFVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX3t3b3JkLGxvbmd9KCkgLSByZWFkIGluc3RydWN0aW9uIHdvcmQvbG9uZ3dvcmQJIwojCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIwojCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCiMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIwojCWxvYWRfZnBuMSgpIC0gbG9hZCBzcmMgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCiMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCiMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgdG8gb3BlcmF0aW5nIHN5c3RlbSBpbmV4YWN0IGhhbmRsZXIJIwojCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgZXhpdDsgd29yayBhbGwgZG9uZQkJIwojCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGVuYWJsZWQgZXhjZXB0aW9uCQkjCiMJZnVuaW1wX3NrZXcoKSAtIGFkanVzdCBmc2F2ZSBzcmMgb3BzIHRvICJpbmNvcnJlY3QiIHZhbHVlCSMKIwlfcmVhbF9zbmFuKCkgLSAiY2FsbG91dCIgZm9yIFNOQU4gZXhjZXB0aW9uCQkJIwojCV9yZWFsX29wZXJyKCkgLSAiY2FsbG91dCIgZm9yIE9QRVJSIGV4Y2VwdGlvbgkJCSMKIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE9WRkwgZXhjZXB0aW9uCQkJIwojCV9yZWFsX3VuZmwoKSAtICJjYWxsb3V0IiBmb3IgVU5GTCBleGNlcHRpb24JCQkjCiMJZ2V0X3BhY2tlZCgpIC0gZmV0Y2ggcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlICJVbmltcCBEYXRhIFR5cGUiIHN0ayBmcmFtZQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNzcmMgb3AgKGZvciBVTk5PUk0vREVOT1JNKQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBJbmV4YWN0IGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIEluZXhhY3QgZXhjZXB0aW9uIHN0ayBmcmFtZQkjCiMJSWYgU05BTiBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gU05BTiBleGNlcHRpb24gc3RrIGZyYW1lCSMKIwlJZiBPUEVSUiBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gT1BFUlIgZXhjZXB0aW9uIHN0ayBmcmFtZQkjCiMJSWYgT1ZGTCBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gT1ZGTCBleGNlcHRpb24gc3RrIGZyYW1lCSMKIwlJZiBVTkZMIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBVTkZMIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMJSWYgVHJhY2UgZXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIwojCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCiMJLSBDb3JyZWN0IHJlc3VsdCBoYXMgYmVlbiBzdG9yZWQgYXMgYXBwcm9wcmlhdGUJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUd28gbWFpbiBpbnN0cnVjdGlvbiB0eXBlcyBjYW4gZW50ZXIgaGVyZTogKDEpIERFTk9STSBvciBVTk5PUk0JIwojIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvcGNsYXNzIDAsMiBvciAzCSMKIyBpbnN0cnVjdGlvbnMsIGFuZCAoMikgUEFDS0VEIHVuaW1wbGVtZW50ZWQgZGF0YSBmb3JtYXQgaW5zdHJ1Y3Rpb25zCSMKIyBhbHNvIG9mIG9wY2xhc3NlcyAwLDIsIG9yIDMuCQkJCQkJIwojCUZvciBVTk5PUk0vREVOT1JNIG9wY2xhc3MgMCBhbmQgMiwgdGhlIGhhbmRsZXIgZmV0Y2hlcyB0aGUgc3JjCSMKIyBvcGVyYW5kIGZyb20gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIGFuZCB0aGUgZHN0IG9wZXJhbmQgKGlmIGR5YWRpYykJIwojIGZyb20gdGhlIEZQIHJlZ2lzdGVyIGZpbGUuIFRoZSBpbnN0cnVjdGlvbiBpcyB0aGVuIGVtdWxhdGVkIGJ5CSMKIyBjaG9vc2luZyBhbiBlbXVsYXRpb24gcm91dGluZSBmcm9tIGEgdGFibGUgb2Ygcm91dGluZXMgaW5kZXhlZCBieQkjCiMgaW5zdHJ1Y3Rpb24gdHlwZS4gT25jZSB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZW11bGF0ZWQgYW5kIHJlc3VsdAkjCiMgc2F2ZWQsIHRoZW4gd2UgY2hlY2sgdG8gc2VlIGlmIGFueSBlbmFibGVkIGV4Y2VwdGlvbnMgcmVzdWx0ZWQgZnJvbQkjCiMgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiBJZiBub25lLCB0aGVuIHdlIGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKIyBfZnBzcF9kb25lKCkuIElmIHRoZXJlIGlzIGFuIGVuYWJsZWQgRlAgZXhjZXB0aW9uLCB0aGVuIHdlIGluc2VydAkjCiMgdGhpcyBleGNlcHRpb24gaW50byB0aGUgRlBVIGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSBhbmQgdGhlbiBleGl0CSMKIyB0aHJvdWdoIF9mcHNwX2RvbmUoKS4JCQkJCQkJIwojCVBBQ0tFRCBvcGNsYXNzIDAgYW5kIDIgaXMgc2ltaWxhciBpbiBob3cgdGhlIGluc3RydWN0aW9uIGlzCSMKIyBlbXVsYXRlZCBhbmQgZXhjZXB0aW9ucyBoYW5kbGVkLiBUaGUgZGlmZmVyZW5jZXMgb2NjdXIgaW4gaG93IHRoZQkjCiMgaGFuZGxlciBsb2FkcyB0aGUgcGFja2VkIG9wIChieSBjYWxsaW5nIGdldF9wYWNrZWQoKSByb3V0aW5lKSBhbmQJIwojIGJ5IHRoZSBmYWN0IHRoYXQgYSBUcmFjZSBleGNlcHRpb24gY291bGQgYmUgcGVuZGluZyBmb3IgUEFDS0VEIG9wcy4JIwojIElmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcsIHRoZW4gdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrCSMKIyBmcmFtZSBpcyBjaGFuZ2VkIHRvIGEgVHJhY2UgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IGlzCSMKIyBtYWRlIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JCQkJCQkjCiMJRm9yIFVOTk9STS9ERU5PUk0gb3BjbGFzcyAzLCB0aGUgYWN0dWFsIG1vdmUgb3V0IHRvIG1lbW9yeSBpcwkjCiMgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgdGhlIHJvdXRpbmUgZm91dCgpLiBJZiBubyBleGNlcHRpb24gc2hvdWxkIG9jY3VyCSMKIyBhcyB0aGUgcmVzdWx0IG9mIGVtdWxhdGlvbiwgdGhlbiBhbiBleGl0IGVpdGhlciBvY2N1cnMgdGhyb3VnaAkjCiMgX2Zwc3BfZG9uZSgpIG9yIHRocm91Z2ggX3JlYWxfdHJhY2UoKSBpZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nCSMKIyAoYSBUcmFjZSBzdGFjayBmcmFtZSBtdXN0IGJlIGNyZWF0ZWQgaGVyZSwgdG9vKS4gSWYgYW4gRlAgZXhjZXB0aW9uCSMKIyBzaG91bGQgb2NjdXIsIHRoZW4gd2UgbXVzdCBjcmVhdGUgYW4gZXhjZXB0aW9uIHN0YWNrIGZyYW1lIG9mIHRoYXQJIwojIHR5cGUgYW5kIGp1bXAgdG8gZWl0aGVyIF9yZWFsX3NuYW4oKSwgX3JlYWxfb3BlcnIoKSwgX3JlYWxfaW5leCgpLAkjCiMgX3JlYWxfdW5mbCgpLCBvciBfcmVhbF9vdmZsKCkgYXMgYXBwcm9wcmlhdGUuIFBBQ0tFRCBvcGNsYXNzIDMJIwojIGVtdWxhdGlvbiBpcyBwZXJmb3JtZWQgaW4gYSBzaW1pbGFyIG1hbm5lci4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgKDEpIERFTk9STSBhbmQgVU5OT1JNICh1bmltcGxlbWVudGVkKSBkYXRhIHR5cGVzOgojCiMJCQkJcG9zdC1pbnN0cnVjdGlvbgojCQkJCSoqKioqKioqKioqKioqKioqCiMJCQkJKiAgICAgIEVBCSoKIwkgcHJlLWluc3RydWN0aW9uCSoJCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogMHgwICogIDB4MGRjICAqCSogMHgzICogIDB4MGRjICAqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCiMJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqCSogICAgICBTUgkqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwojICgyKSBQQUNLRUQgZm9ybWF0ICh1bnN1cHBvcnRlZCkgb3BjbGFzc2VzIHR3byBhbmQgdGhyZWU6CiMJKioqKioqKioqKioqKioqKioKIwkqICAgICAgRUEJKgojCSoJCSoKIwkqKioqKioqKioqKioqKioqKgojCSogMHgyICogIDB4MGRjCSoKIwkqKioqKioqKioqKioqKioqKgojCSogICAgIE5leHQJKgojCSogICAgICBQQwkqCiMJKioqKioqKioqKioqKioqKioKIwkqICAgICAgU1IJKgojCSoqKioqKioqKioqKioqKioqCiMKCWdsb2JhbAkJX2Zwc3BfdW5zdXBwCl9mcHNwX3Vuc3VwcDoKCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJZnNhdmUJCUZQX1NSQyglYTYpCQkjIHNhdmUgZnAgc3RhdGUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPwoJYm5lLmIJCWZ1X3MKZnVfdToKCW1vdi5sCQkldXNwLCVhMAkJIyBmZXRjaCB1c2VyIHN0YWNrIHBvaW50ZXIKCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjawoJYnJhLmIJCWZ1X2NvbnQKIyBpZiB0aGUgZXhjZXB0aW9uIGlzIGFuIG9wY2xhc3MgemVybyBvciB0d28gdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUKIyBleGNlcHRpb24sIHRoZW4gdGhlIGE3JyBjYWxjdWxhdGVkIGhlcmUgaXMgd3Jvbmcgc2luY2UgaXQgZG9lc24ndAojIHN0YWNrIGFuIGVhLiBob3dldmVyLCB3ZSBkb24ndCBuZWVkIGFuIGE3JyBmb3IgdGhpcyBjYXNlIGFueXdheXMuCmZ1X3M6CglsZWEJCTB4NCtFWENfRUEoJWE2KSwlYTAJIyBsb2FkIG9sZCBhNycKCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjawoKZnVfY29udDoKCiMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCiMgdGhlIEZQSUFSIHNob3VsZCBiZSBzZXQgY29ycmVjdGx5IGZvciBBTEwgZXhjZXB0aW9ucyBwYXNzaW5nIHRocm91Z2gKIyB0aGlzIHBvaW50LgoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgljbHIuYgkJU1BDT05EX0ZMRyglYTYpCQkjIGNsZWFyIHNwZWNpYWwgY29uZGl0aW9uIGZsYWcKCiMgU2VwYXJhdGUgb3BjbGFzcyB0aHJlZSAoZnBuLXRvLW1lbSkgb3BzIHNpbmNlIHRoZXkgaGF2ZSBhIGRpZmZlcmVudAojIHN0YWNrIGZyYW1lIGFuZCBwcm90b2NvbC4KCWJ0c3QJCSYweDUsRVhDX0NNRFJFRyglYTYpCSMgaXMgaXQgYW4gZm1vdmUgb3V0PwoJYm5lLncJCWZ1X291dAkJCSMgeWVzCgojIFNlcGFyYXRlIHBhY2tlZCBvcGNsYXNzIHR3byBpbnN0cnVjdGlvbnMuCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomNn0sJWQwCgljbXBpLmIJCSVkMCwmMHgxMwoJYmVxLncJCWZ1X2luX3BhY2sKCgojIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAoJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKCWZtb3YubAkJJjB4MCwlZnBzcgoKIyBPcGNsYXNzIHR3byB3LyBtZW1vcnktdG8tZnBuIG9wZXJhdGlvbiB3aWxsIGhhdmUgYW4gaW5jb3JyZWN0IGV4dGVuZGVkCiMgcHJlY2lzaW9uIGZvcm1hdCBpZiB0aGUgc3JjIGZvcm1hdCB3YXMgc2luZ2xlIG9yIGRvdWJsZSBhbmQgdGhlCiMgc291cmNlIGRhdGEgdHlwZSB3YXMgYW4gSU5GLCBOQU4sIERFTk9STSwgb3IgVU5OT1JNCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBpbnB1dAoJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCgojIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgc3JjIG9wZXJhbmQgb3IgdGhlIGRzdCBvcGVyYW5kIChvciBib3RoKSBpcyB0aGUKIyBVTk5PUk0gb3IgREVOT1JNLiBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IHRhZ3MgdGhlIG9wZXJhbmQgdHlwZS4gaWYgdGhlCiMgaW5wdXQgaXMgYW4gVU5OT1JNLCB0aGVuIGNvbnZlcnQgaXQgdG8gYSBOT1JNLCBERU5PUk0sIG9yIFpFUk8uCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZ1X29wMgkJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCgpmdV9vcDI6Cgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzYXZlIHNyYyBvcHR5cGUgdGFnCgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCgojIGJpdCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCiMgYXQgdGhpcyBwb2ludAoJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KCWJlcS5iCQlmdV9leHRyYWN0CQkjIG1vbmFkaWMKCWNtcGkuYgkJMStFWENfQ01EUkVHKCVhNiksJjB4M2EJIyBpcyBvcGVyYXRpb24gYW4gZnRzdD8KCWJlcS5iCQlmdV9leHRyYWN0CQkjIHllcywgc28gaXQncyBtb25hZGljLCB0b28KCglic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCgoJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAoJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQoJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KCWJuZS5iCQlmdV9vcDJfZG9uZQkJIyBubwoJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KZnVfb3AyX2RvbmU6Cgltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCgpmdV9leHRyYWN0OgoJY2xyLmwJCSVkMAoJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKCgliZmV4dHUJCTErRVhDX0NNRFJFRyglYTYpeyYxOiY3fSwlZDEgIyBleHRyYWN0IGV4dGVuc2lvbgoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCglsZWEJCUZQX0RTVCglYTYpLCVhMQoKCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKCiMKIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CiMJQlNVTgk6IG5vbmUKIwlTTkFOCTogYWxsIGR5YWRpYyBvcHMKIwlPUEVSUgk6IGZzcXJ0KC1OT1JNKQojCU9WRkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAojCVVORkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAojCURaCTogZmRpdgojCUlORVgyCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKIwlJTkVYMQk6IG5vbmUgKHBhY2tlZCBkb2Vzbid0IGdvIHRocm91Z2ggaGVyZSkKIwoKIyB3ZSBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQojIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBzZXQKCWJuZS5iCQlmdV9pbl9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAoKZnVfaW5fY29udDoKIyBmY21wIGFuZCBmdHN0IGRvIG5vdCBzdG9yZSBhbnkgcmVzdWx0LgoJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbgoJYW5kaS5iCQkmMHgzOCwlZDAJCSMgZXh0cmFjdCBiaXRzIDMtNQoJY21waS5iCQklZDAsJjB4MzgJCSMgaXMgaW5zdHIgZmNtcCBvciBmdHN0PwoJYmVxLmIJCWZ1X2luX2V4aXQJCSMgeWVzCgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCglic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgdGhlIHJlc3VsdAoKZnVfaW5fZXhpdDoKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9mcHNwX2RvbmUKCmZ1X2luX2VuYToKCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgoJYm5lLmIJCWZ1X2luX2V4YwkJIyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2V0CgojCiMgTm8gZXhjZXB0aW9ucyBvY2N1cnJlZCB0aGF0IHdlcmUgYWxzbyBlbmFibGVkLiBOb3c6CiMKIwlpZiAoT1ZGTCAmJiBvdmZsX2Rpc2FibGVkICYmIGluZXhhY3RfZW5hYmxlZCkgewojCSAgICBicmFuY2ggdG8gX3JlYWxfaW5leCgpIChldmVuIGlmIHRoZSByZXN1bHQgd2FzIGV4YWN0ISk7CiMJfSBlbHNlIHsKIwkgICAgc2F2ZSB0aGUgcmVzdWx0IGluIHRoZSBwcm9wZXIgZnAgcmVnICh1bmxlc3MgdGhlIG9wIGlzIGZjbXAgb3IgZnRzdCk7CiMJICAgIHJldHVybjsKIwl9CiMKCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgd2FzIG92ZXJmbG93IHNldD8KCWJlcS5iCQlmdV9pbl9jb250CQkjIG5vCgpmdV9pbl9vdmZsY2hrOgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIGluZXhhY3QgZW5hYmxlZD8KCWJlcS5iCQlmdV9pbl9jb250CQkjIG5vCglicmEudwkJZnVfaW5fZXhjX292ZmwJCSMgZ28gaW5zZXJ0IG92ZXJmbG93IGZyYW1lCgojCiMgQW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZDoKIwojCXNoaWZ0IGVuYWJsZWQgZXhjZXB0aW9uIGZpZWxkIGludG8gbG8gYnl0ZSBvZiBkMDsKIwlpZiAoKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCkgfHwKIwkgICAgKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIFVORkwgJiYgdW5mbF9kaXNhYmxlZCkpIHsKIwkJLyoKIwkJICogdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBtdXN0IGNhbGwgX3JlYWxfaW5leCgpIG5vdyBvciBlbHNlCiMJCSAqIHRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgaXQgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKIwkJICovCiMJCWNhbGwgX3JlYWxfaW5leCgpOwojCX0gZWxzZSB7CiMJCXJlc3RvcmUgZXhjIHN0YXRlIChTTkFOfHxPUEVSUnx8T1ZGTHx8VU5GTHx8RFp8fElORVgpIGludG8gdGhlIEZQVTsKIwl9CiMKZnVfaW5fZXhjOgoJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAoJY21waS5iCQklZDAsJjB4NgkJIyBpcyBleGNlcHRpb24gSU5FWD8gKDYpCglibmUuYgkJZnVfaW5fZXhjX2V4aXQJCSMgbm8KCiMgdGhlIGVuYWJsZWQgZXhjZXB0aW9uIHdhcyBpbmV4YWN0CglidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCB1bmRlcmZsb3cgb2NjdXI/CglibmUudwkJZnVfaW5fZXhjX3VuZmwJCSMgeWVzCglidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cj8KCWJuZS53CQlmdV9pbl9leGNfb3ZmbAkJIyB5ZXMKCiMgaGVyZSwgd2UgaW5zZXJ0IHRoZSBjb3JyZWN0IGZzYXZlIHN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBmc2F2ZSBmcmFtZSBmb3IgdGhlCiMgY29ycmVzcG9uZGluZyBleGNlcHRpb24uIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBzaG91bGQgYmUgdGhlIG9yaWdpbmFsCiMgc3JjIG9wZXJhbmQuCmZ1X2luX2V4Y19leGl0OgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAoJYnNyLmwJCWZ1bmltcF9za2V3CQkjIHNrZXcgc2dsIG9yIGRibCBpbnB1dHMKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKCgltb3YudwkJKHRibF9leGNlcHQuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KSAjIGNyZWF0ZSBleGMgc3RhdHVzCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9mcHNwX2RvbmUKCnRibF9leGNlcHQ6CglzaG9ydAkJMHhlMDAwLDB4ZTAwNiwweGUwMDQsMHhlMDA1CglzaG9ydAkJMHhlMDAzLDB4ZTAwMiwweGUwMDEsMHhlMDAxCgpmdV9pbl9leGNfdW5mbDoKCW1vdi53CQkmMHg0LCVkMAoJYnJhLmIJCWZ1X2luX2V4Y19leGl0CmZ1X2luX2V4Y19vdmZsOgoJbW92LncJCSYweDAzLCVkMAoJYnJhLmIJCWZ1X2luX2V4Y19leGl0CgojIElmIHRoZSBpbnB1dCBvcGVyYW5kIHRvIHRoaXMgb3BlcmF0aW9uIHdhcyBvcGNsYXNzIHR3byBhbmQgYSBzaW5nbGUKIyBvciBkb3VibGUgcHJlY2lzaW9uIGRlbm9ybSwgaW5mLCBvciBuYW4sIHRoZSBvcGVyYW5kIG5lZWRzIHRvIGJlCiMgImNvcnJlY3RlZCIgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgcHJvcGVyIGVxdWl2YWxlbnQgZXh0ZW5kZWQgcHJlY2lzaW9uCiMgbnVtYmVyLgoJZ2xvYmFsCQlmaXhfc2tld2VkX29wcwpmaXhfc2tld2VkX29wczoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYwOiY2fSwlZDAgIyBleHRyYWN0IG9wY2xhc3Msc3JjIGZtdAoJY21waS5iCQklZDAsJjB4MTEJCSMgaXMgY2xhc3MgPSAyICYgZm10ID0gc2dsPwoJYmVxLmIJCWZzb19zZ2wJCQkjIHllcwoJY21waS5iCQklZDAsJjB4MTUJCSMgaXMgY2xhc3MgPSAyICYgZm10ID0gZGJsPwoJYmVxLmIJCWZzb19kYmwJCQkjIHllcwoJcnRzCQkJCQkjIG5vCgpmc29fc2dsOgoJbW92LncJCUxPQ0FMX0VYKCVhMCksJWQwCSMgZmV0Y2ggc3JjIGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCWNtcGkudwkJJWQwLCYweDNmODAJCSMgaXMgfGV4cHwgPT0gJDNmODA/CgliZXEuYgkJZnNvX3NnbF9kbnJtX3plcm8JIyB5ZXMKCWNtcGkudwkJJWQwLCYweDQwN2YJCSMgbm87IGlzIHxleHB8ID09ICQ0MDdmPwoJYmVxLmIJCWZzb19pbmZuYW4JCSMgeWVzCglydHMJCQkJCSMgbm8KCmZzb19zZ2xfZG5ybV96ZXJvOgoJYW5kaS5sCQkmMHg3ZmZmZmZmZixMT0NBTF9ISSglYTApICMgY2xlYXIgai1iaXQKCWJlcS5iCQlmc29femVybwkJIyBpdCdzIGEgc2tld2VkIHplcm8KZnNvX3NnbF9kbnJtOgojIGhlcmUsIHdlIGNvdW50IG9uIG5vcm0gbm90IHRvIGFsdGVyIGEwLi4uCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG1hbnRpc3NhCgluZWcudwkJJWQwCQkJIyAtc2hmdCBhbXQKCWFkZGkudwkJJjB4M2Y4MSwlZDAJCSMgYWRqdXN0IG5ldyBleHBvbmVudAoJYW5kaS53CQkmMHg4MDAwLExPQ0FMX0VYKCVhMCkJIyBjbGVhciBvbGQgZXhwb25lbnQKCW9yLncJCSVkMCxMT0NBTF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJcnRzCgpmc29femVybzoKCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgYm9ndXMgZXhwb25lbnQKCXJ0cwoKZnNvX2luZm5hbjoKCWFuZGkuYgkJJjB4N2YsTE9DQUxfSEkoJWEwKQkjIGNsZWFyIGotYml0CglvcmkudwkJJjB4N2ZmZixMT0NBTF9FWCglYTApCSMgbWFrZSBleHBvbmVudCA9ICQ3ZmZmCglydHMKCmZzb19kYmw6Cgltb3YudwkJTE9DQUxfRVgoJWEwKSwlZDAJIyBmZXRjaCBzcmMgZXhwb25lbnQKCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgoJY21waS53CQklZDAsJjB4M2MwMAkJIyBpcyB8ZXhwfCA9PSAkM2MwMD8KCWJlcS5iCQlmc29fZGJsX2Rucm1femVybwkjIHllcwoJY21waS53CQklZDAsJjB4NDNmZgkJIyBubzsgaXMgfGV4cHwgPT0gJDQzZmY/CgliZXEuYgkJZnNvX2luZm5hbgkJIyB5ZXMKCXJ0cwkJCQkJIyBubwoKZnNvX2RibF9kbnJtX3plcm86CglhbmRpLmwJCSYweDdmZmZmZmZmLExPQ0FMX0hJKCVhMCkgIyBjbGVhciBqLWJpdAoJYm5lLmIJCWZzb19kYmxfZG5ybQkJIyBpdCdzIGEgc2tld2VkIGRlbm9ybQoJdHN0LmwJCUxPQ0FMX0xPKCVhMCkJCSMgaXMgaXQgYSB6ZXJvPwoJYmVxLmIJCWZzb196ZXJvCQkjIHllcwpmc29fZGJsX2Rucm06CiMgaGVyZSwgd2UgY291bnQgb24gbm9ybSBub3QgdG8gYWx0ZXIgYTAuLi4KCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKCW5lZy53CQklZDAJCQkjIC1zaGZ0IGFtdAoJYWRkaS53CQkmMHgzYzAxLCVkMAkJIyBhZGp1c3QgbmV3IGV4cG9uZW50CglhbmRpLncJCSYweDgwMDAsTE9DQUxfRVgoJWEwKQkjIGNsZWFyIG9sZCBleHBvbmVudAoJb3IudwkJJWQwLExPQ0FMX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIGZtb3ZlIG91dCB0b29rIGFuIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbi4KIyB0aGUgc3JjIG9wZXJhbmQgaXMgaW4gRlBfU1JDLiBDYWxsIF9mb3V0KCkgdG8gd3JpdGUgb3V0IHRoZSByZXN1bHQgYW5kCiMgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4Y2VwdGlvbnMsIGlmIGFueSwgdG8gdGFrZS4KZnVfb3V0OgoKIyBTZXBhcmF0ZSBwYWNrZWQgbW92ZSBvdXRzIGZyb20gdGhlIFVOTk9STSBhbmQgREVOT1JNIG1vdmUgb3V0cy4KCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwlZDAKCWNtcGkuYgkJJWQwLCYweDMKCWJlcS53CQlmdV9vdXRfcGFjawoJY21waS5iCQklZDAsJjB4NwoJYmVxLncJCWZ1X291dF9wYWNrCgoKIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCiMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQuCiMgZm1vdmUgb3V0IGRvZXNuJ3QgYWZmZWN0IGNjb2Rlcy4KCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKCWZtb3YubAkJJjB4MCwlZnBzcgoKIyB0aGUgc3JjIGNhbiBPTkxZIGJlIGEgREVOT1JNIG9yIGFuIFVOTk9STSEgc28sIGRvbid0IG1ha2UgYW55IGJpZyBzdWJyb3V0aW5lCiMgY2FsbCBoZXJlLiBqdXN0IGZpZ3VyZSBvdXQgd2hhdCBpdCBpcy4uLgoJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGdldCBleHBvbmVudAoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCgliZXEuYgkJZnVfb3V0X2Rlbm9ybQkJIyBpdCdzIGEgREVOT1JNCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgZml4IGl0CgoJbW92LmIJCSVkMCxTVEFHKCVhNikKCglicmEuYgkJZnVfb3V0X2NvbnQKZnVfb3V0X2Rlbm9ybToKCW1vdi5iCQkmREVOT1JNLFNUQUcoJWE2KQpmdV9vdXRfY29udDoKCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYwoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCgoJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VzCglic3IubAkJZm91dAkJCSMgY2FsbCBmbW92ZSBvdXQgcm91dGluZQoKIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CiMJQlNVTgk6IG5vbmUKIwlTTkFOCTogbm9uZQojCU9QRVJSCTogZm1vdmUue2IsdyxsfSBvdXQgb2YgbGFyZ2UgVU5OT1JNCiMJT1ZGTAk6IGZtb3ZlLntzLGR9CiMJVU5GTAk6IGZtb3ZlLntzLGQseH0KIwlEWgk6IG5vbmUKIwlJTkVYMgk6IGFsbAojCUlORVgxCTogbm9uZSAocGFja2VkIGRvZXNuJ3QgdHJhdmVsIHRocm91Z2ggaGVyZSkKCiMgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAoJYm5lLncJCWZ1X291dF9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAoKZnVfb3V0X2RvbmU6CgoJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VkCgojIG9uIGV4dGVuZGVkIHByZWNpc2lvbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9ucyB1c2luZyBwcmUtZGVjcmVtZW50IG9yCiMgcG9zdC1pbmNyZW1lbnQgYWRkcmVzc2luZyBtb2RlLCB0aGUgYWRkcmVzcyByZWdpc3RlciBpcyBub3QgdXBkYXRlZC4gaXMgdGhlCiMgYWRkcmVzcyByZWdpc3RlciB3YXMgdGhlIHN0YWNrIHBvaW50ZXIgdXNlZCBmcm9tIHVzZXIgbW9kZSwgdGhlbiBsZXQncyB1cGRhdGUKIyBpdCBoZXJlLiBpZiBpdCB3YXMgdXNlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgdGhlbiB3ZSBoYXZlIHRvIGhhbmRsZSB0aGlzCiMgYXMgYSBzcGVjaWFsIGNhc2UuCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCglibmUuYgkJZnVfb3V0X2RvbmVfcwoKCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgcmVzdG9yZSBhNwoJbW92LmwJCSVhMCwldXNwCgpmdV9vdXRfZG9uZV9jb250OgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CglibmUuYgkJZnVfb3V0X3RyYWNlCQkjIHllcwoKCWJyYS5sCQlfZnBzcF9kb25lCgojIGlzIHRoZSBlYSBtb2RlIHByZS1kZWNyZW1lbnQgb2YgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSBzdXBlcnZpc29yIG1vZGU/CiMgKCJmbW92LnggZnBtLC0oYTcpIikgaWYgc28sCmZ1X291dF9kb25lX3M6CgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKCWJuZS5iCQlmdV9vdXRfZG9uZV9jb250CgojIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IGlzIHN0aWxsIGluIGZwMC4gYnV0LCB3ZSBuZWVkIHRvIHNhdmUgaXQKIyBzb21ld2hlcmUgb24gdGhlIHN0YWNrIHVudGlsIHdlIGNhbiBjb3B5IGl0IHRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlLgojIGhlcmUsIHdlJ3JlIGNvdW50aW5nIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRvIGJlIHRoZSBvbGQgcGxhY2UtaG9sZGVycwojIGZvciBmcDAvZnAxIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHJlc3RvcmVkLiB0aGF0IHdheSwgd2UgY2FuIHdyaXRlCiMgb3ZlciB0aG9zZSBkZXN0aW5hdGlvbnMgd2l0aCB0aGUgc2hpZnRlZCBzdGFjayBmcmFtZS4KCWZtb3ZtLngJCSYweDgwLEZQX1NSQyglYTYpCSMgcHV0IGFuc3dlciBvbiBzdGFjawoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgoKCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCgltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKCiMgbm93LCBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIHByb3BlciBwbGFjZSBvbiB0aGUgc3RhY2sKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4MCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0xPKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg4KCVzcCkKCglhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAoKCWJ0c3QJCSYweDcsKCVzcCkKCWJuZS5iCQlmdV9vdXRfdHJhY2UKCglicmEubAkJX2Zwc3BfZG9uZQoKZnVfb3V0X2VuYToKCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgoJYm5lLmIJCWZ1X291dF9leGMJCSMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHNldAoKIyBubyBleGNlcHRpb25zIHdlcmUgc2V0LgojIGlmIGEgZGlzYWJsZWQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIGluZXhhY3Qgd2FzIGVuYWJsZWQgYnV0IHRoZSByZXN1bHQKIyB3YXMgZXhhY3QsIHRoZW4gYSBicmFuY2ggdG8gX3JlYWxfaW5leCgpIGlzIG1hZGUuCglidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHdhcyBvdmVyZmxvdyBzZXQ/CgliZXEudwkJZnVfb3V0X2RvbmUJCSMgbm8KCmZ1X291dF9vdmZsY2hrOgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIGluZXhhY3QgZW5hYmxlZD8KCWJlcS53CQlmdV9vdXRfZG9uZQkJIyBubwoJYnJhLncJCWZ1X2luZXgJCQkjIHllcwoKIwojIFRoZSBmcCBtb3ZlIG91dCB0aGF0IHRvb2sgdGhlICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9uIHdhcwojIGJlaW5nIHRyYWNlZC4gU2luY2UgdGhlIHN0YWNrIGZyYW1lcyBhcmUgc2ltaWxhciwgZ2V0IHRoZSAiY3VycmVudCIgUEMKIyBmcm9tIEZQSUFSIGFuZCBwdXQgaXQgaW4gdGhlIHRyYWNlIHN0YWNrIGZyYW1lIHRoZW4ganVtcCB0byBfcmVhbF90cmFjZSgpLgojCiMJCSAgVU5TVVBQIEZSQU1FCQkgICBUUkFDRSBGUkFNRQojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICAgRUEJKgkqICAgIEN1cnJlbnQJKgojCQkqCQkqCSogICAgICBQQwkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogMHgzICogIDB4MGRjCSoJKiAweDIgKiAgMHgwMjQJKgojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCiMJCSogICAgICBQQwkqCSogICAgICBQQwkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgICBTUgkqCSogICAgICBTUgkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMKZnVfb3V0X3RyYWNlOgoJbW92LncJCSYweDIwMjQsMHg2KCVzcCkKCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCglicmEubAkJX3JlYWxfdHJhY2UKCiMgYW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZC4KZnVfb3V0X2V4YzoKCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKCiMgd2UgZG9uJ3QgbWVzcyB3aXRoIHRoZSBleGlzdGluZyBmc2F2ZSBmcmFtZS4ganVzdCByZS1pbnNlcnQgaXQgYW5kCiMganVtcCB0byB0aGUgIl9yZWFsX3t9KCkiIGhhbmRsZXIuLi4KCW1vdi53CQkodGJsX2Z1X291dC5iLCVwYywlZDAudyoyKSwlZDAKCWptcAkJKHRibF9mdV9vdXQuYiwlcGMsJWQwLncqMSkKCglzd2JlZwkJJjB4OAp0YmxfZnVfb3V0OgoJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgQlNVTiBjYW4ndCBoYXBwZW4KCXNob3J0CQl0YmxfZnVfb3V0CS0gdGJsX2Z1X291dAkjIFNOQU4gY2FuJ3QgaGFwcGVuCglzaG9ydAkJZnVfb3BlcnIJLSB0YmxfZnVfb3V0CSMgT1BFUlIKCXNob3J0CQlmdV9vdmZsCQktIHRibF9mdV9vdXQJIyBPVkZMCglzaG9ydAkJZnVfdW5mbAkJLSB0YmxfZnVfb3V0CSMgVU5GTAoJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgRFogY2FuJ3QgaGFwcGVuCglzaG9ydAkJZnVfaW5leAkJLSB0YmxfZnVfb3V0CSMgSU5FWDIKCXNob3J0CQl0YmxfZnVfb3V0CS0gdGJsX2Z1X291dAkjIElORVgxIHdvbid0IG1ha2UgaXQgaGVyZQoKIyBmb3Igc25hbixvcGVycixvdmZsLHVuZmwsIHNyYyBvcCBpcyBzdGlsbCBpbiBGUF9TUkMgc28ganVzdAojIGZyZXN0b3JlIGl0LgpmdV9zbmFuOgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGQ4LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkOAoJbW92LncJCSYweGUwMDYsMitGUF9TUkMoJWE2KQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCgoJdW5sawkJJWE2CgoKCWJyYS5sCQlfcmVhbF9zbmFuCgpmdV9vcGVycjoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YudwkJJjB4MzBkMCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKCW1vdi53CQkmMHhlMDA0LDIrRlBfU1JDKCVhNikKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQoKCXVubGsJCSVhNgoKCglicmEubAkJX3JlYWxfb3BlcnIKCmZ1X292Zmw6CglmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCB0byB0aGUgc3RhY2sKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJbW92LncJCSYweDMwZDQsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQ0Cgltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBFWE9QCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9yZWFsX292ZmwKCiMgdW5kZXJmbG93IGNhbiBoYXBwZW4gZm9yIGV4dGVuZGVkIHByZWNpc2lvbi4gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MKIyB0aHJlZSBpbnN0cnVjdGlvbiBleGNlcHRpb25zIGRvbid0IHVwZGF0ZSB0aGUgc3RhY2sgcG9pbnRlci4gc28sIGlmIHRoZQojIGV4Y2VwdGlvbiBvY2N1cnJlZCBmcm9tIHVzZXIgbW9kZSwgdGhlbiBzaW1wbHkgdXBkYXRlIGE3IGFuZCBleGl0IG5vcm1hbGx5LgojIGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUsIGNoZWNrIGlmCmZ1X3VuZmw6Cgltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyByZXN0b3JlIGE2CgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQoJYm5lLncJCWZ1X3VuZmxfcwoKCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgcmVzdG9yZSBhNyB3aGV0aGVyIHdlIG5lZWQKCW1vdi5sCQklYTAsJXVzcAkJIyB0byBvciBub3QuLi4KCmZ1X3VuZmxfY29udDoKCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjawoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YudwkJJjB4MzBjYyxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4Y2MKCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKCgl1bmxrCQklYTYKCglicmEubAkJX3JlYWxfdW5mbAoKZnVfdW5mbF9zOgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgd2FzIHRoZSA8ZWE+IG1vZGUgLShzcCk/CglibmUuYgkJZnVfdW5mbF9jb250CgojIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IGlzIHN0aWxsIGluIGZwMC4gYnV0LCB3ZSBuZWVkIHRvIHNhdmUgaXQKIyBzb21ld2hlcmUgb24gdGhlIHN0YWNrIHVudGlsIHdlIGNhbiBjb3B5IGl0IHRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlCiMgKHdoZXJlIHRoZSBleGMgZnJhbWUgaXMgY3VycmVudGx5KS4gbWFrZSBzdXJlIGl0J3Mgbm90IGF0IHRoZSB0b3Agb2YgdGhlCiMgZnJhbWUgb3IgaXQgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgZXhjIHN0YWNrIGZyYW1lIGlzIHNoaWZ0ZWQgImRvd24iLgoJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBwdXQgYW5zd2VyIG9uIHN0YWNrCglmbW92bS54CQkmMHg0MCxGUF9EU1QoJWE2KQkjIHB1dCBFWE9QIG9uIHN0YWNrCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGNjLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjYwoJbW92LncJCSYweGUwMDMsMitGUF9EU1QoJWE2KQoKCWZyZXN0b3JlCUZQX0RTVCglYTYpCQkjIHJlc3RvcmUgRVhPUAoKCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKCiMgbm93LCBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIHByb3BlciBwbGFjZSBvbiB0aGUgc3RhY2sKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4MCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0xPKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg4KCVzcCkKCglhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAoKCWJyYS5sCQlfcmVhbF91bmZsCgojIGZtb3ZlIGluIGFuZCBvdXQgZW50ZXIgaGVyZS4KZnVfaW5leDoKCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjawoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YudwkJJjB4MzBjNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKCgl1bmxrCQklYTYKCgoJYnJhLmwJCV9yZWFsX2luZXgKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmdV9pbl9wYWNrOgoKCiMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgojIHNvLCBzaW5jZSB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIHJlLWNyZWF0ZSB0aGVtIGFueXdheXMsIHplcm8gZXhjZXB0aW9uIGZpZWxkCglhbmRpLmwJCSYweDBmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCglmbW92LmwJCSYweDAsJWZwc3IKCglic3IubAkJZ2V0X3BhY2tlZAkJIyBmZXRjaCBwYWNrZWQgc3JjIG9wZXJhbmQKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKCWJzci5sCQlzZXRfdGFnX3gJCSMgc2V0IHNyYyBvcHR5cGUgdGFnCgoJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZwoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZwoKIyBiaXQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGVzIHRoZSBtb25hZGljIGFuZCBkeWFkaWMgb3BlcmF0aW9ucwojIGF0IHRoaXMgcG9pbnQKCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CgliZXEuYgkJZnVfZXh0cmFjdF9wCQkjIG1vbmFkaWMKCWNtcGkuYgkJMStFWENfQ01EUkVHKCVhNiksJjB4M2EJIyBpcyBvcGVyYXRpb24gYW4gZnRzdD8KCWJlcS5iCQlmdV9leHRyYWN0X3AJCSMgeWVzLCBzbyBpdCdzIG1vbmFkaWMsIHRvbwoKCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKCglsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZ1X29wMl9kb25lX3AJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCmZ1X29wMl9kb25lX3A6Cgltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCgpmdV9leHRyYWN0X3A6CgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYwoKCWJmZXh0dQkJMStFWENfQ01EUkVHKCVhNil7JjE6Jjd9LCVkMSAjIGV4dHJhY3QgZXh0ZW5zaW9uCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWxlYQkJRlBfRFNUKCVhNiksJWExCgoJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgoJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQoKIwojIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKIwlCU1VOCTogbm9uZQojCVNOQU4JOiBhbGwgZHlhZGljIG9wcwojCU9QRVJSCTogZnNxcnQoLU5PUk0pCiMJT1ZGTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCiMJVU5GTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCiMJRFoJOiBmZGl2CiMJSU5FWDIJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAojCUlORVgxCTogYWxsCiMKCiMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAoJYm5lLncJCWZ1X2luX2VuYV9wCQkjIHNvbWUgYXJlIGVuYWJsZWQKCmZ1X2luX2NvbnRfcDoKIyBmY21wIGFuZCBmdHN0IGRvIG5vdCBzdG9yZSBhbnkgcmVzdWx0LgoJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbgoJYW5kaS5iCQkmMHgzOCwlZDAJCSMgZXh0cmFjdCBiaXRzIDMtNQoJY21waS5iCQklZDAsJjB4MzgJCSMgaXMgaW5zdHIgZmNtcCBvciBmdHN0PwoJYmVxLmIJCWZ1X2luX2V4aXRfcAkJIyB5ZXMKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSB0aGUgcmVzdWx0CgpmdV9pbl9leGl0X3A6CgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KCWJuZS53CQlmdV9pbl9leGl0X3NfcAkJIyBzdXBlcnZpc29yCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyB1cGRhdGUgdXNlciBhNwoJbW92LmwJCSVhMCwldXNwCgpmdV9pbl9leGl0X2NvbnRfcDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCgoJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcwoKIyB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZS4gY2hlY2sgdG8gc2VlIGlmIHRoZQojIGFkZHJlc3NpbmcgbW9kZSB3YXMgKGE3KSsuIGlmIHNvLCB3ZSdsbCBuZWVkIHRvIHNoaWZ0IHRoZQojIHN0YWNrIGZyYW1lICJ1cCIuCmZ1X2luX2V4aXRfc19wOgoJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBlYSBtb2RlIChhNykrCgliZXEuYgkJZnVfaW5fZXhpdF9jb250X3AJIyBubwoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKCiMgc2hpZnQgdGhlIHN0YWNrIGZyYW1lICJ1cCIuIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSA8ZWE+IGZpZWxkLgoJbW92LmwJCTB4NCglc3ApLDB4MTAoJXNwKQoJbW92LmwJCTB4MCglc3ApLDB4Yyglc3ApCglhZGQubAkJJjB4Yywlc3AKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCgoJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcwoKZnVfaW5fZW5hX3A6CglhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkICYgc2V0CgliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KCWJuZS5iCQlmdV9pbl9leGNfcAkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAoKIwojIE5vIGV4Y2VwdGlvbnMgb2NjdXJyZWQgdGhhdCB3ZXJlIGFsc28gZW5hYmxlZC4gTm93OgojCiMJaWYgKE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCAmJiBpbmV4YWN0X2VuYWJsZWQpIHsKIwkgICAgYnJhbmNoIHRvIF9yZWFsX2luZXgoKSAoZXZlbiBpZiB0aGUgcmVzdWx0IHdhcyBleGFjdCEpOwojCX0gZWxzZSB7CiMJICAgIHNhdmUgdGhlIHJlc3VsdCBpbiB0aGUgcHJvcGVyIGZwIHJlZyAodW5sZXNzIHRoZSBvcCBpcyBmY21wIG9yIGZ0c3QpOwojCSAgICByZXR1cm47CiMJfQojCglidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHdhcyBvdmVyZmxvdyBzZXQ/CgliZXEudwkJZnVfaW5fY29udF9wCQkjIG5vCgpmdV9pbl9vdmZsY2hrX3A6CglidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgaW5leGFjdCBlbmFibGVkPwoJYmVxLncJCWZ1X2luX2NvbnRfcAkJIyBubwoJYnJhLncJCWZ1X2luX2V4Y19vdmZsX3AJIyBkbyBfcmVhbF9pbmV4KCkgbm93CgojCiMgQW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZDoKIwojCXNoaWZ0IGVuYWJsZWQgZXhjZXB0aW9uIGZpZWxkIGludG8gbG8gYnl0ZSBvZiBkMDsKIwlpZiAoKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCkgfHwKIwkgICAgKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIFVORkwgJiYgdW5mbF9kaXNhYmxlZCkpIHsKIwkJLyoKIwkJICogdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBtdXN0IGNhbGwgX3JlYWxfaW5leCgpIG5vdyBvciBlbHNlCiMJCSAqIHRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgaXQgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKIwkJICovCiMJCWNhbGwgX3JlYWxfaW5leCgpOwojCX0gZWxzZSB7CiMJCXJlc3RvcmUgZXhjIHN0YXRlIChTTkFOfHxPUEVSUnx8T1ZGTHx8VU5GTHx8RFp8fElORVgpIGludG8gdGhlIEZQVTsKIwl9CiMKZnVfaW5fZXhjX3A6CglzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CgljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPyAoNiBvciA3KQoJYmx0LmIJCWZ1X2luX2V4Y19leGl0X3AJIyBubwoKIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QKCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIHVuZGVyZmxvdyBvY2N1cj8KCWJuZS53CQlmdV9pbl9leGNfdW5mbF9wCSMgeWVzCglidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cj8KCWJuZS53CQlmdV9pbl9leGNfb3ZmbF9wCSMgeWVzCgojIGhlcmUsIHdlIGluc2VydCB0aGUgY29ycmVjdCBmc2F2ZSBzdGF0dXMgdmFsdWUgaW50byB0aGUgZnNhdmUgZnJhbWUgZm9yIHRoZQojIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uLiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbAojIHNyYyBvcGVyYW5kLgojIGFzIGEgcmVtaW5kZXIgZm9yIGZ1dHVyZSBwcmVkaWN0ZWQgcGFpbiBhbmQgYWdvbnksIHdlIGFyZSBwYXNzaW5nIGluIGZzYXZlIHRoZQojICJub24tc2tld2VkIiBvcGVyYW5kIGZvciBjYXNlcyBvZiBzZ2wgYW5kIGRibCBzcmMgSU5GcyxOQU5zLCBhbmQgREVOT1JNcy4KIyB0aGlzIGlzIElOQ09SUkVDVCBmb3IgZW5hYmxlZCBTTkFOIHdoaWNoIHdvdWxkIGdpdmUgdG8gdGhlIHVzZXIgdGhlIHNrZXdlZCBTTkFOISEhCmZ1X2luX2V4Y19leGl0X3A6CglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPwoJYm5lLncJCWZ1X2luX2V4Y19leGl0X3NfcAkjIHN1cGVydmlzb3IKCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3Cgltb3YubAkJJWEwLCV1c3AKCmZ1X2luX2V4Y19leGl0X2NvbnRfcDoKCW1vdi53CQkodGJsX2V4Y2VwdF9wLmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3AKCgl1bmxrCQklYTYKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIGVuYWJsZWQ/CglibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKCglicmEubAkJX2Zwc3BfZG9uZQoKdGJsX2V4Y2VwdF9wOgoJc2hvcnQJCTB4ZTAwMCwweGUwMDYsMHhlMDA0LDB4ZTAwNQoJc2hvcnQJCTB4ZTAwMywweGUwMDIsMHhlMDAxLDB4ZTAwMQoKZnVfaW5fZXhjX292ZmxfcDoKCW1vdi53CQkmMHgzLCVkMAoJYnJhLncJCWZ1X2luX2V4Y19leGl0X3AKCmZ1X2luX2V4Y191bmZsX3A6Cgltb3YudwkJJjB4NCwlZDAKCWJyYS53CQlmdV9pbl9leGNfZXhpdF9wCgpmdV9pbl9leGNfZXhpdF9zX3A6CglidHN0CQkmbWlhN19iaXQsU1BDT05EX0ZMRyglYTYpCgliZXEuYgkJZnVfaW5fZXhjX2V4aXRfY29udF9wCgoJbW92LncJCSh0YmxfZXhjZXB0X3AuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcAoKCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQoKIyBzaGlmdCBzdGFjayBmcmFtZSAidXAiLiB3aG8gY2FyZXMgYWJvdXQgPGVhPiBmaWVsZC4KCW1vdi5sCQkweDQoJXNwKSwweDEwKCVzcCkKCW1vdi5sCQkweDAoJXNwKSwweGMoJXNwKQoJYWRkLmwJCSYweGMsJXNwCgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJuZS5iCQlmdV90cmFjZV9wCQkjIHllcwoKCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKCiMKIyBUaGUgb3BjbGFzcyB0d28gUEFDS0VEIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiCiMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIE1ha2UgdGhlICJjdXJyZW50IiBQQyB0aGUgRlBJQVIgYW5kIHB1dCBpdCBpbiB0aGUKIyB0cmFjZSBzdGFjayBmcmFtZSB0aGVuIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KIwojCQkgIFVOU1VQUCBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIEVBCSoJKiAgICBDdXJyZW50CSoKIwkJKgkJKgkqICAgICAgUEMJKgojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqIDB4MiAqCTB4MGRjCSoJKiAweDIgKiAgMHgwMjQJKgojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCiMJCSogICAgICBQQwkqCSogICAgICBQQwkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgICBTUgkqCSogICAgICBTUgkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCmZ1X3RyYWNlX3A6Cgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQoJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkKCglicmEubAkJX3JlYWxfdHJhY2UKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZnVfb3V0X3BhY2s6CgoKIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCiMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQuCiMgZm1vdmUgb3V0IGRvZXNuJ3QgYWZmZWN0IGNjb2Rlcy4KCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKCWZtb3YubAkJJjB4MCwlZnBzcgoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKCWJzci5sCQlsb2FkX2ZwbjEKCiMgdW5saWtlIG90aGVyIG9wY2xhc3MgMywgdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9ucywgcGFja2VkIG11c3QgYmUKIyBhYmxlIHRvIGRldGVjdCBhbGwgb3BlcmFuZCB0eXBlcy4KCWxlYQkJRlBfU1JDKCVhNiksJWEwCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZ1X29wMl9wCQkjIG5vCglic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTwoKZnVfb3AyX3A6Cgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzYXZlIHNyYyBvcHR5cGUgdGFnCgoJY2xyLmwJCSVkMAoJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAoKCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQkjIGluIGNhc2UgYTYgY2hhbmdlcwoJYnNyLmwJCWZvdXQJCQkjIGNhbGwgZm1vdmUgb3V0IHJvdXRpbmUKCiMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgojCUJTVU4JOiBubwojCVNOQU4JOiB5ZXMKIwlPUEVSUgk6IGlmICgoa19mYWN0b3IgPiArMTcpIHx8IChkZWMuIGV4cCBleGNlZWRzIDMgZGlnaXRzKSkKIwlPVkZMCTogbm8KIwlVTkZMCTogbm8KIwlEWgk6IG5vCiMJSU5FWDIJOiB5ZXMKIwlJTkVYMQk6IG5vCgojIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCiMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKCWJuZS53CQlmdV9vdXRfZW5hX3AJCSMgc29tZSBhcmUgZW5hYmxlZAoKZnVfb3V0X2V4aXRfcDoKCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPwoJYm5lLmIJCWZ1X291dF9leGl0X3NfcAkJIyBzdXBlcnZpc29yCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyB1cGRhdGUgdXNlciBhNwoJbW92LmwJCSVhMCwldXNwCgpmdV9vdXRfZXhpdF9jb250X3A6CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcwoKCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKCiMgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUuIGNoZWNrIHRvIHNlZSBpZiB0aGUKIyBhZGRyZXNzaW5nIG1vZGUgd2FzIC0oYTcpLiBpZiBzbywgd2UnbGwgbmVlZCB0byBzaGlmdCB0aGUKIyBzdGFjayBmcmFtZSAiZG93biIuCmZ1X291dF9leGl0X3NfcDoKCWJ0c3QJCSZtZGE3X2JpdCxTUENPTkRfRkxHKCVhNikgIyB3YXMgZWEgbW9kZSAtKGE3KQoJYmVxLmIJCWZ1X291dF9leGl0X2NvbnRfcAkjIG5vCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQoKIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjawoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4NCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQoKCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCgoJYnRzdAkJJjB4NywoJXNwKQoJYm5lLncJCWZ1X3RyYWNlX3AKCglicmEubAkJX2Zwc3BfZG9uZQoKZnVfb3V0X2VuYV9wOgoJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAoJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCgliZXEudwkJZnVfb3V0X2V4aXRfcAoKCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKCiMgYW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZC4KIyB0aGUgb25seSBleGNlcHRpb24gcG9zc2libGUgb24gcGFja2VkIG1vdmUgb3V0IGFyZSBJTkVYLCBPUEVSUiwgYW5kIFNOQU4uCmZ1X291dF9leGNfcDoKCWNtcGkuYgkJJWQwLCYweDFhCgliZ3QudwkJZnVfaW5leF9wMgoJYmVxLncJCWZ1X29wZXJyX3AKCmZ1X3NuYW5fcDoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKCWJuZS5iCQlmdV9zbmFuX3NfcAoKCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKCW1vdi5sCQklYTAsJXVzcAoJYnJhLncJCWZ1X3NuYW4KCmZ1X3NuYW5fc19wOgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCglibmUudwkJZnVfc25hbgoKIyB0aGUgaW5zdHJ1Y3Rpb24gd2FzICJmbW92ZS5wIGZwbiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUuCiMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCiMgY2FuIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVyZSB0aGUgZXhjZXB0aW9uIGZyYW1lIHdhcy4KCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YudwkJJjB4MzBkOCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKCW1vdi53CQkmMHhlMDA2LDIrRlBfU1JDKCVhNikJIyBzZXQgZnNhdmUgc3RhdHVzCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAoKCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKCiMgbm93LCB3ZSBjb3B5IHRoZSBkZWZhdWx0IHJlc3VsdCB0byBpdHMgcHJvcGVyIGxvY2F0aW9uCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFKzB4OCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFKzB4Yyglc3ApCgoJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKCgoJYnJhLmwJCV9yZWFsX3NuYW4KCmZ1X29wZXJyX3A6CglidHN0CQkmMHg1LEVYQ19TUiglYTYpCglibmUudwkJZnVfb3BlcnJfcF9zCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAoJbW92LmwJCSVhMCwldXNwCglicmEudwkJZnVfb3BlcnIKCmZ1X29wZXJyX3BfczoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZwoJYm5lLncJCWZ1X29wZXJyCgojIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKIyBjYW4gc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZXJlIHRoZSBleGNlcHRpb24gZnJhbWUgd2FzLgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGQwLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkMAoJbW92LncJCSYweGUwMDQsMitGUF9TUkMoJWE2KQkjIHNldCBmc2F2ZSBzdGF0dXMKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCgoJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKCgltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCgltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQoKIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrMHg4KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKCglhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAoKCglicmEubAkJX3JlYWxfb3BlcnIKCmZ1X2luZXhfcDI6CglidHN0CQkmMHg1LEVYQ19TUiglYTYpCglibmUudwkJZnVfaW5leF9zX3AyCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAoJbW92LmwJCSVhMCwldXNwCglicmEudwkJZnVfaW5leAoKZnVfaW5leF9zX3AyOgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCglibmUudwkJZnVfaW5leAoKIyB0aGUgaW5zdHJ1Y3Rpb24gd2FzICJmbW92ZS5wIGZwbiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUuCiMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCiMgY2FuIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVyZSB0aGUgZXhjZXB0aW9uIGZyYW1lIHdhcy4KCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YudwkJJjB4MzBjNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzZXQgZnNhdmUgc3RhdHVzCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAoKCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKCiMgbm93LCB3ZSBjb3B5IHRoZSBkZWZhdWx0IHJlc3VsdCB0byBpdHMgcHJvcGVyIGxvY2F0aW9uCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFKzB4OCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFKzB4Yyglc3ApCgoJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKCgoJYnJhLmwJCV9yZWFsX2luZXgKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBpZiB3ZSdyZSBzdHVmZmluZyBhIHNvdXJjZSBvcGVyYW5kIGJhY2sgaW50byBhbiBmc2F2ZSBmcmFtZSB0aGVuIHdlCiMgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBmb3Igc2luZ2xlIG9yIGRvdWJsZSBzb3VyY2Ugb3BlcmFuZHMgdGhhdCB0aGUKIyBmb3JtYXQgc3R1ZmZlZCBpcyBhcyB3ZWlyZCBhcyB0aGUgaGFyZHdhcmUgdXN1YWxseSBtYWtlcyBpdC4KIwoJZ2xvYmFsCQlmdW5pbXBfc2tldwpmdW5pbXBfc2tldzoKCWJmZXh0dQkJRVhDX0VYVFdPUkQoJWE2KXsmMzomM30sJWQwICMgZXh0cmFjdCBzcmMgc3BlY2lmaWVyCgljbXBpLmIJCSVkMCwmMHgxCQkjIHdhcyBzcmMgc2dsPwoJYmVxLmIJCWZ1bmltcF9za2V3X3NnbAkJIyB5ZXMKCWNtcGkuYgkJJWQwLCYweDUJCSMgd2FzIHNyYyBkYmw/CgliZXEuYgkJZnVuaW1wX3NrZXdfZGJsCQkjIHllcwoJcnRzCgpmdW5pbXBfc2tld19zZ2w6Cgltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggREVOT1JNIGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCWJlcS5iCQlmdW5pbXBfc2tld19zZ2xfbm90CgljbXBpLncJCSVkMCwmMHgzZjgwCgliZ3QuYgkJZnVuaW1wX3NrZXdfc2dsX25vdAoJbmVnLncJCSVkMAkJCSMgbWFrZSBleHBvbmVudCBuZWdhdGl2ZQoJYWRkaS53CQkmMHgzZjgxLCVkMAkJIyBmaW5kIGFtdCB0byBzaGlmdAoJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGZldGNoIERFTk9STSBoaShtYW4pCglsc3IubAkJJWQwLCVkMQkJCSMgc2hpZnQgaXQKCWJzZXQJCSYzMSwlZDEJCQkjIHNldCBqLWJpdAoJbW92LmwJCSVkMSxGUF9TUkNfSEkoJWE2KQkjIGluc2VydCBuZXcgaGkobWFuKQoJYW5kaS53CQkmMHg4MDAwLEZQX1NSQ19FWCglYTYpCSMgY2xlYXIgb2xkIGV4cG9uZW50CglvcmkudwkJJjB4M2Y4MCxGUF9TUkNfRVgoJWE2KQkjIGluc2VydCBuZXcgInNrZXdlZCIgZXhwb25lbnQKZnVuaW1wX3NrZXdfc2dsX25vdDoKCXJ0cwoKZnVuaW1wX3NrZXdfZGJsOgoJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIERFTk9STSBleHBvbmVudAoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCgliZXEuYgkJZnVuaW1wX3NrZXdfZGJsX25vdAoJY21waS53CQklZDAsJjB4M2MwMAoJYmd0LmIJCWZ1bmltcF9za2V3X2RibF9ub3QKCgl0c3QuYgkJRlBfU1JDX0VYKCVhNikJCSMgbWFrZSAiaW50ZXJuYWwgZm9ybWF0IgoJc21pLmIJCTB4MitGUF9TUkMoJWE2KQoJbW92LncJCSVkMCxGUF9TUkNfRVgoJWE2KQkjIGluc2VydCBleHBvbmVudCB3aXRoIGNsZWFyZWQgc2lnbgoJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZyxyLHMKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcAoJbW92LncJCSYweDNjMDEsJWQxCQkjIHBhc3MgZGVub3JtIHRocmVzaG9sZAoJYnNyLmwJCWRucm1fbHAJCQkjIGRlbm9ybSBpdAoJbW92LncJCSYweDNjMDAsJWQwCQkjIG5ldyBleHBvbmVudAoJdHN0LmIJCTB4MitGUF9TUkMoJWE2KQkJIyBpcyBzaWduIHNldD8KCWJlcS5iCQlmc3NfZGJsX2Rlbm9ybV9kb25lCSMgbm8KCWJzZXQJCSYxNSwlZDAJCQkjIHNldCBzaWduCmZzc19kYmxfZGVub3JtX2RvbmU6Cglic2V0CQkmMHg3LEZQX1NSQ19ISSglYTYpCSMgc2V0IGotYml0Cgltb3YudwkJJWQwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudApmdW5pbXBfc2tld19kYmxfbm90OgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCV9tZW1fd3JpdGUyCl9tZW1fd3JpdGUyOgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQoJYmVxLmwJCV9kbWVtX3dyaXRlCgltb3YubAkJMHgwKCVhMCksRlBfRFNUX0VYKCVhNikKCW1vdi5sCQkweDQoJWEwKSxGUF9EU1RfSEkoJWE2KQoJbW92LmwJCTB4OCglYTApLEZQX0RTVF9MTyglYTYpCgljbHIubAkJJWQxCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX2VmZmFkZCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCAiVW5pbXBsZW1lbnRlZAkjCiMJCQllZmZlY3RpdmUgYWRkcmVzcyIgZXhjZXB0aW9uLgkJCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nCSMKIwlzeXN0ZW0uCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIwojCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCiMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIwojCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCiMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKIwlkZWNiaW4oKSAtIGNvbnZlcnQgcGFja2VkIGRhdGEgdG8gRlAgYmluYXJ5IGRhdGEJCSMKIwlfcmVhbF9mcHVfZGlzYWJsZWQoKSAtICJjYWxsb3V0IiBmb3IgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uCSMKIwlfcmVhbF9hY2Nlc3MoKSAtICJjYWxsb3V0IiBmb3IgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJIwojCV9tZW1fcmVhZCgpIC0gcmVhZCBleHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZCBmcm9tIG1lbW9yeQkjCiMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBleGl0OyB3b3JrIGFsbCBkb25lCQkjCiMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZW5hYmxlZCBleGNlcHRpb24JCSMKIwlmbW92bV9keW5hbWljKCkgLSBlbXVsYXRlIGR5bmFtaWMgZm1vdm0gaW5zdHJ1Y3Rpb24JCSMKIwlmbW92bV9jdHJsKCkgLSBlbXVsYXRlIGZtb3ZtIGNvbnRyb2wgaW5zdHJ1Y3Rpb24JCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wbGVtZW50ZWQgPGVhPiIgc3RrIGZyYW1lCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUlmIGFjY2VzcyBlcnJvcjoJCQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lCSMKIwlJZiBGUFUgZGlzYWJsZWQ6CQkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIEZQVSBkaXNhYmxlZCBzdGFjayBmcmFtZQkjCiMJSWYgVHJhY2UgZXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIwojCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCiMJLSBOb25lIChjb3JyZWN0IHJlc3VsdCBoYXMgYmVlbiBzdG9yZWQgYXMgYXBwcm9wcmlhdGUpCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGlzIGV4Y2VwdGlvbiBoYW5kbGVzIDMgdHlwZXMgb2Ygb3BlcmF0aW9uczoJCQkjCiMgKDEpIEZQIEluc3RydWN0aW9ucyB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gb3IgcGFja2VkIGltbWVkaWF0ZQkjCiMgICAgIGFkZHJlc3NpbmcgbW9kZS4JCQkJCQkJIwojICgyKSBUaGUgImZtb3ZtLngiIGluc3RydWN0aW9uIHcvIGR5bmFtaWMgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbi4JIwojICgzKSBUaGUgImZtb3ZtLmwiIGluc3RydWN0aW9uIHcvIDIgb3IgMyBjb250cm9sIHJlZ2lzdGVycy4JCSMKIwkJCQkJCQkJCSMKIwlGb3IgaW1tZWRpYXRlIGRhdGEgb3BlcmF0aW9ucywgdGhlIGRhdGEgaXMgcmVhZCBpbiB3LyBhCQkjCiMgX21lbV9yZWFkKCkgImNhbGxvdXQiLCBjb252ZXJ0ZWQgdG8gRlAgYmluYXJ5IChpZiBwYWNrZWQpLCBhbmQgdXNlZAkjCiMgYXMgdGhlIHNvdXJjZSBvcGVyYW5kIHRvIHRoZSBpbnN0cnVjdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGluc3RydWN0aW9uCSMKIyB3b3JkLiBJZiBubyBGUCBleGNlcHRpb24gc2hvdWxkIGJlIHJlcG9ydGVkIGFkcyBhIHJlc3VsdCBvZiB0aGUJIwojIGVtdWxhdGlvbiwgdGhlbiB0aGUgcmVzdWx0IGlzIHN0b3JlZCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgYW5kCSMKIyB0aGUgaGFuZGxlciBleGl0cyB0aHJvdWdoIF9mcHNwX2RvbmUoKS4gSWYgYW4gZW5hYmxlZCBleGMgaGFzIGJlZW4JIwojIHNpZ25hbGxlZCBhcyBhIHJlc3VsdCBvZiBlbXVsYXRpb24sIHRoZW4gYW4gZnNhdmUgc3RhdGUgZnJhbWUJCSMKIyBjb3JyZXNwb25kaW5nIHRvIHRoZSBGUCBleGNlcHRpb24gdHlwZSBtdXN0IGJlIGVudGVyZWQgaW50byB0aGUgMDYwCSMKIyBGUFUgYmVmb3JlIGV4aXRpbmcuIEluIGVpdGhlciB0aGUgZW5hYmxlZCBvciBkaXNhYmxlZCBjYXNlcywgd2UJIwojIG11c3QgYWxzbyBjaGVjayBpZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLCBpbiB3aGljaCBjYXNlLCB3ZQkjCiMgbXVzdCBjcmVhdGUgYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24JIwojIHN0YWNrIGZyYW1lLiBJZiBubyBUcmFjZSBpcyBwZW5kaW5nLCB3ZSBzaW1wbHkgZXhpdCB0aHJvdWdoCQkjCiMgX2Zwc3BfZG9uZSgpLgkJCQkJCQkJIwojCUZvciAiZm1vdm0ueCIsIGNhbGwgdGhlIHJvdXRpbmUgZm1vdm1fZHluYW1pYygpIHdoaWNoIHdpbGwJIwojIGRlY29kZSBhbmQgZW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24uIE5vIEZQIGV4Y2VwdGlvbnMgY2FuIGJlIHBlbmRpbmcJIwojIGFzIGEgcmVzdWx0IG9mIHRoaXMgb3BlcmF0aW9uIGVtdWxhdGlvbi4gQSBUcmFjZSBleGNlcHRpb24gY2FuIGJlCSMKIyBwZW5kaW5nLCB0aG91Z2gsIHdoaWNoIG1lYW5zIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lIG11c3QgYmUgY2hhbmdlZAkjCiMgdG8gYSBUcmFjZSBzdGFjayBmcmFtZSBhbmQgYW4gZXhpdCBtYWRlIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JIwojIEZvciB0aGUgY2FzZSBvZiAiZm1vdm0ueCBEbiwtKGE3KSIsIHdoZXJlIHRoZSBvZmZlbmRpbmcgaW5zdHJ1Y3Rpb24JIwojIHdhcyBleGVjdXRlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgdGhpcyBoYW5kbGVyIG11c3Qgc3RvcmUgdGhlIEZQCSMKIyByZWdpc3RlciBmaWxlIHZhbHVlcyB0byB0aGUgc3lzdGVtIHN0YWNrIGJ5IGl0c2VsZiBzaW5jZQkJIwojIGZtb3ZtX2R5bmFtaWMoKSBjYW4ndCBoYW5kbGUgdGhpcy4gQSBub3JtYWwgZXhpdCBpcyBtYWRlIHRocm91Z2gJIwojIGZwc3BfZG9uZSgpLgkJCQkJCQkJIwojCUZvciAiZm1vdm0ubCIsIGZtb3ZtX2N0cmwoKSBpcyB1c2VkIHRvIGVtdWxhdGUgdGhlIGluc3RydWN0aW9uLgkjCiMgQWdhaW4sIGEgVHJhY2UgZXhjZXB0aW9uIG1heSBiZSBwZW5kaW5nIGFuZCBhbiBleGl0IG1hZGUgdGhyb3VnaAkjCiMgX3JlYWxfdHJhY2UoKS4gRWxzZSwgYSBub3JtYWwgZXhpdCBpcyBtYWRlIHRocm91Z2ggX2Zwc3BfZG9uZSgpLgkjCiMJCQkJCQkJCQkjCiMJQmVmb3JlIGFueSBvZiB0aGUgYWJvdmUgaXMgYXR0ZW1wdGVkLCBpdCBtdXN0IGJlIGNoZWNrZWQgdG8JIwojIHNlZSBpZiB0aGUgRlBVIGlzIGRpc2FibGVkLiBTaW5jZSB0aGUgIlVuaW1wIDxlYT4iIGV4Y2VwdGlvbiBpcyB0YWtlbgkjCiMgYmVmb3JlIHRoZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24sIGJ1dCB0aGUgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uCSMKIyBoYXMgaGlnaGVyIHByaW9yaXR5LCB3ZSBjaGVjayB0aGUgZGlzYWJsZWQgYml0IGluIHRoZSBQQ1IuIElmIHNldCwJIwojIHRoZW4gd2UgbXVzdCBjcmVhdGUgYW4gOCB3b3JkICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMgZnJvbSB0aGUgY3VycmVudCA0IHdvcmQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLiBUaGlzIGluY2x1ZGVzCQkjCiMgcmVwcm9kdWNpbmcgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiB0byBwdXQgb24gdGhlCSMKIyBuZXcgc3RhY2sgZnJhbWUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlJbiB0aGUgcHJvY2VzcyBvZiBhbGwgZW11bGF0aW9uIHdvcmssIGlmIGEgX21lbV9yZWFkKCkJCSMKIyAiY2FsbG91dCIgcmV0dXJucyBhIGZhaWxpbmcgcmVzdWx0IGluZGljYXRpbmcgYW4gYWNjZXNzIGVycm9yLCB0aGVuCSMKIyB3ZSBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBzdGFjawkjCiMgZnJhbWUuIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgYSBmYXVsdGluZyBhZGRyZXNzIGFuZCBhIGZhdWx0LQkjCiMgc3RhdHVzLWxvbmd3b3JkLiBUaGVzZSBhcmUgY3JlYXRlZCB3aXRoaW4gdGhpcyBoYW5kbGVyLgkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfZnBzcF9lZmZhZGQKX2Zwc3BfZWZmYWRkOgoKIyBUaGlzIGV4Y2VwdGlvbiB0eXBlIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlICJMaW5lIEYgRW11bGF0b3IiCiMgZXhjZXB0aW9uLiBUaGVyZWZvcmUsIHRoZSBGUFUgY291bGQgYmUgZGlzYWJsZWQgd2hlbiBlbnRlcmluZyBoZXJlLgojIFNvLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGRpc2FibGVkIGFuZCBoYW5kbGUgdGhhdCBjYXNlIHNlcGFyYXRlbHkuCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCgltb3ZjCQklcGNyLCVkMAkJIyBsb2FkIHByb2MgY3IKCWJ0c3QJCSYweDEsJWQwCQkjIGlzIEZQVSBkaXNhYmxlZD8KCWJuZS53CQlpZWFfZGlzYWJsZWQJCSMgeWVzCgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCgoJbGluawkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCgojIFBDIG9mIGluc3RydWN0aW9uIHRoYXQgdG9vayB0aGUgZXhjZXB0aW9uIGlzIHRoZSBQQyBpbiB0aGUgZnJhbWUKCW1vdi5sCQlFWENfUEMoJWE2KSxFWENfRVhUV1BUUiglYTYpCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCSMgc3RvcmUgT1BXT1JEIGFuZCBFWFRXT1JECgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJdHN0LncJCSVkMAkJCSMgaXMgb3BlcmF0aW9uIGZtb3ZlbT8KCWJtaS53CQlpZWFfZm1vdm0JCSMgeWVzCgojCiMgaGVyZSwgd2Ugd2lsbCBoYXZlOgojCWZhYnMJZmRhYnMJZnNhYnMJCWZhY29zCQlmbW9kCiMJZmFkZAlmZGFkZAlmc2FkZAkJZmFzaW4JCWZyZW0KIwlmY21wCQkJCWZhdGFuCQlmc2NhbGUKIwlmZGl2CWZkZGl2CWZzZGl2CQlmYXRhbmgJCWZzaW4KIwlmaW50CQkJCWZjb3MJCWZzaW5jb3MKIwlmaW50cnoJCQkJZmNvc2gJCWZzaW5oCiMJZm1vdmUJZmRtb3ZlCWZzbW92ZQkJZmV0b3gJCWZ0YW4KIwlmbXVsCWZkbXVsCWZzbXVsCQlmZXRveG0xCQlmdGFuaAojCWZuZWcJZmRuZWcJZnNuZWcJCWZnZXRleHAJCWZ0ZW50b3gKIwlmc2dsZGl2CQkJCWZnZXRtYW4JCWZ0d290b3gKIwlmc2dsbXVsCQkJCWZsb2cxMAojCWZzcXJ0CQkJCWZsb2cyCiMJZnN1YglmZHN1Yglmc3N1YgkJZmxvZ24KIwlmdHN0CQkJCWZsb2ducDEKIyB3aGljaCBjYW4gYWxsIHVzZSBmPG9wPi57eCxwfQojIHNvLCBub3cgaXQncyBpbW1lZGlhdGUgZGF0YSBleHRlbmRlZCBwcmVjaXNpb24gQU5EIFBBQ0tFRCBGT1JNQVQhCiMKaWVhX29wOgoJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQoKCWJ0c3QJCSYweGEsJWQwCQkjIGlzIHNyYyBmbXQgeCBvciBwPwoJYm5lLmIJCWllYV9vcF9wYWNrCQkjIHBhY2tlZAoKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gIzxkYXRhPgoJbGVhCQlGUF9TUkMoJWE2KSwlYTEJCSMgcGFzczogcHRyIHRvIHN1cGVyIGFkZHIKCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcwoJYnNyLmwJCV9pbWVtX3JlYWQJCSMgcmVhZCBleHRlbmRlZCBpbW1lZGlhdGUKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUudwkJaWVhX2lhY2MJCSMgeWVzCgoJYnJhLmIJCWllYV9vcF9zZXRzcmMKCmllYV9vcF9wYWNrOgoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byAjPGRhdGE+CglsZWEJCUZQX1NSQyglYTYpLCVhMQkJIyBwYXNzOiBwdHIgdG8gc3VwZXIgZHN0Cgltb3YubAkJJjB4YywlZDAJCSMgcGFzczogMTIgYnl0ZXMKCWJzci5sCQlfaW1lbV9yZWFkCQkjIHJlYWQgcGFja2VkIG9wZXJhbmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUudwkJaWVhX2lhY2MJCSMgeWVzCgojIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgoJYmZleHR1CQlGUF9TUkMoJWE2KXsmMTomMTV9LCVkMAkjIGdldCBleHAKCWNtcGkudwkJJWQwLCYweDdmZmYJCSMgSU5GIG9yIE5BTj8KCWJlcS5iCQlpZWFfb3Bfc2V0c3JjCQkjIG9wZXJhbmQgaXMgYW4gSU5GIG9yIE5BTgoKIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYSB6ZXJvIGlmIHRoZSBtYW50aXNzYSBpcyBhbGwgemVybywgZWxzZSBpdCdzCiMgYSBub3JtYWwgcGFja2VkIG9wLgoJbW92LmIJCTMrRlBfU1JDKCVhNiksJWQwCSMgZ2V0IGJ5dGUgNAoJYW5kaS5iCQkmMHgwZiwlZDAJCSMgY2xlYXIgYWxsIGJ1dCBsYXN0IG55YmJsZQoJYm5lLmIJCWllYV9vcF9ncF9ub3Rfc3BlYwkjIG5vdCBhIHplcm8KCXRzdC5sCQlGUF9TUkNfSEkoJWE2KQkJIyBpcyBsdyAyIHplcm8/CglibmUuYgkJaWVhX29wX2dwX25vdF9zcGVjCSMgbm90IGEgemVybwoJdHN0LmwJCUZQX1NSQ19MTyglYTYpCQkjIGlzIGx3IDMgemVybz8KCWJlcS5iCQlpZWFfb3Bfc2V0c3JjCQkjIG9wZXJhbmQgaXMgYSBaRVJPCmllYV9vcF9ncF9ub3Rfc3BlYzoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBwYWNrZWQgb3AKCWJzci5sCQlkZWNiaW4JCQkjIGNvbnZlcnQgdG8gZXh0ZW5kZWQKCWZtb3ZtLngJCSYweDgwLEZQX1NSQyglYTYpCSMgbWFrZSB0aGlzIHRoZSBzcmNvcAoKaWVhX29wX3NldHNyYzoKCWFkZGkubAkJJjB4YyxFWENfRVhUV1BUUiglYTYpCSMgdXBkYXRlIGV4dGVuc2lvbiB3b3JkIHBvaW50ZXIKCiMgRlBfU1JDIG5vdyBob2xkcyB0aGUgc3JjIG9wZXJhbmQuCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBjb3VsZCBiZSBBTllUSElORyEhIQoJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KCWJuZS5iCQlpZWFfb3BfZ2V0ZHN0CQkjIG5vCglic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STS9ERU5PUk0vWkVSTwoJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2V0IG5ldyBvcHR5cGUgdGFnCmllYV9vcF9nZXRkc3Q6CgljbHIuYgkJU1RPUkVfRkxHKCVhNikJCSMgY2xlYXIgInN0b3JlIHJlc3VsdCIgYm9vbGVhbgoKCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CgliZXEuYgkJaWVhX29wX2V4dHJhY3QJCSMgbW9uYWRpYwoJYnRzdAkJJjB4NCwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBmc2luY29zLGZ0c3QsZmNtcD8KCWJuZS5iCQlpZWFfb3Bfc3BlYwkJIyB5ZXMKCmllYV9vcF9sb2FkZHN0OgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGZldGNoIGRzdCByZWdubwoJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBvcGVyYW5kCgoJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAoJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQoJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgY291bGQgYmUgQU5ZVEhJTkchISEKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CglibmUuYgkJaWVhX29wX2V4dHJhY3QJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNL0RFTk9STS9aRVJPCgltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzZXQgbmV3IG9wdHlwZSB0YWcKCWJyYS5iCQlpZWFfb3BfZXh0cmFjdAoKIyB0aGUgb3BlcmF0aW9uIGlzIGZzaW5jb3MsIGZ0c3QsIG9yIGZjbXAuIG9ubHkgZmNtcCBpcyBkeWFkaWMKaWVhX29wX3NwZWM6CglidHN0CQkmMHgzLDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZzaW5jb3M/CgliZXEuYgkJaWVhX29wX2V4dHJhY3QJCSMgeWVzCiMgbm93LCB3ZSdyZSBsZWZ0IHdpdGggZnRzdCBhbmQgZmNtcC4gc28sIGZpcnN0IGxldCdzIHRhZyB0aGVtIHNvIHRoYXQgdGhleSBkb24ndAojIHN0b3JlIGEgcmVzdWx0LiB0aGVuLCBvbmx5IGZjbXAgd2lsbCBicmFuY2ggYmFjayBhbmQgcGljayB1cCBhIGRzdCBvcGVyYW5kLgoJc3QJCVNUT1JFX0ZMRyglYTYpCQkjIGRvbid0IHN0b3JlIGEgZmluYWwgcmVzdWx0CglidHN0CQkmMHgxLDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZjbXA/CgliZXEuYgkJaWVhX29wX2xvYWRkc3QJCSMgeWVzCgppZWFfb3BfZXh0cmFjdDoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzOiBybmQgbW9kZSxwcmVjCgoJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQoJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgoKCWZtb3YubAkJJjB4MCwlZnBjcgoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWxlYQkJRlBfRFNUKCVhNiksJWExCgoJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgoJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQoKIwojIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKIwlCU1VOCTogbm9uZQojCVNOQU4JOiBhbGwgb3BlcmF0aW9ucwojCU9QRVJSCTogYWxsIHJlZy1yZWcgb3IgbWVtLXJlZyBvcGVyYXRpb25zIHRoYXQgY2FuIG5vcm1hbGx5IG9wZXJyCiMJT1ZGTAk6IHNhbWUgYXMgT1BFUlIKIwlVTkZMCTogc2FtZSBhcyBPUEVSUgojCURaCTogc2FtZSBhcyBPUEVSUgojCUlORVgyCTogc2FtZSBhcyBPUEVSUgojCUlORVgxCTogYWxsIHBhY2tlZCBpbW1lZGlhdGUgb3BlcmF0aW9ucwojCgojIHdlIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCiMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKCWJuZS5iCQlpZWFfb3BfZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKCiMgbm93LCB3ZSBzYXZlIHRoZSByZXN1bHQsIHVubGVzcywgb2YgY291cnNlLCB0aGUgb3BlcmF0aW9uIHdhcyBmdHN0IG9yIGZjbXAuCiMgdGhlc2UgZG9uJ3Qgc2F2ZSByZXN1bHRzLgppZWFfb3Bfc2F2ZToKCXRzdC5iCQlTVE9SRV9GTEcoJWE2KQkJIyBkb2VzIHRoaXMgb3Agc3RvcmUgYSByZXN1bHQ/CglibmUuYgkJaWVhX29wX2V4aXQxCQkjIGV4aXQgd2l0aCBubyBmcmVzdG9yZQoKaWVhX29wX3N0b3JlOgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGZldGNoIGRzdCByZWdubwoJYnNyLmwJCXN0b3JlX2ZwcmVnCQkjIHN0b3JlIHRoZSByZXN1bHQKCmllYV9vcF9leGl0MToKCW1vdi5sCQlFWENfUEMoJWE2KSxVU0VSX0ZQSUFSKCVhNikgIyBzZXQgRlBJQVIgdG8gIkN1cnJlbnQgUEMiCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfUEMoJWE2KSAjIHNldCAiTmV4dCBQQyIgaW4gZXhjIGZyYW1lCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgkJCSMgdW5yYXZlbCB0aGUgZnJhbWUKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYm5lLncJCWllYV9vcF90cmFjZQkJIyB5ZXMKCglicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCgppZWFfb3BfZW5hOgoJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlIGFuZCBzZXQKCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgoJYm5lLmIJCWllYV9vcF9leGMJCSMgYXQgbGVhc3Qgb25lIHdhcyBzZXQKCiMgbm8gZXhjZXB0aW9uIG9jY3VycmVkLiBub3csIGRpZCBhIGRpc2FibGVkLCBleGFjdCBvdmVyZmxvdyBvY2N1ciB3aXRoIGluZXhhY3QKIyBlbmFibGVkPyBpZiBzbywgdGhlbiB3ZSBoYXZlIHRvIHN0dWZmIGFuIG92ZXJmbG93IGZyYW1lIGludG8gdGhlIEZQVS4KCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIG92ZXJmbG93IG9jY3VyPwoJYmVxLmIJCWllYV9vcF9zYXZlCgppZWFfb3Bfb3ZmbDoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIGluZXhhY3QgZW5hYmxlZD8KCWJlcS5iCQlpZWFfb3Bfc3RvcmUJCSMgbm8KCWJyYS5iCQlpZWFfb3BfZXhjX292ZmwJCSMgeWVzCgojIGFuIGVuYWJsZWQgZXhjZXB0aW9uIG9jY3VycmVkLiB3ZSBoYXZlIHRvIGluc2VydCB0aGUgZXhjZXB0aW9uIHR5cGUgYmFjayBpbnRvCiMgdGhlIG1hY2hpbmUuCmllYV9vcF9leGM6CglzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CgljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPwoJYm5lLmIJCWllYV9vcF9leGNfZm9yY2UJIyBubwoKIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QuIHNvLCBpZiBpdCBvY2N1cnMgd2l0aCBhbiBvdmVyZmxvdwojIG9yIHVuZGVyZmxvdyB0aGF0IHdhcyBkaXNhYmxlZCwgdGhlbiB3ZSBoYXZlIHRvIGZvcmNlIGFuIG92ZXJmbG93IG9yCiMgdW5kZXJmbG93IGZyYW1lLgoJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CglibmUuYgkJaWVhX29wX2V4Y19vdmZsCQkjIHllcwoJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgdW5kZXJmbG93IG9jY3VyPwoJYm5lLmIJCWllYV9vcF9leGNfdW5mbAkJIyB5ZXMKCmllYV9vcF9leGNfZm9yY2U6Cgltb3YudwkJKHRibF9pZWFfZXhjZXB0LmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikKCWJyYS5iCQlpZWFfb3BfZXhpdDIJCSMgZXhpdCB3aXRoIGZyZXN0b3JlCgp0YmxfaWVhX2V4Y2VwdDoKCXNob3J0CQkweGUwMDIsIDB4ZTAwNiwgMHhlMDA0LCAweGUwMDUKCXNob3J0CQkweGUwMDMsIDB4ZTAwMiwgMHhlMDAxLCAweGUwMDEKCmllYV9vcF9leGNfb3ZmbDoKCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikKCWJyYS5iCQlpZWFfb3BfZXhpdDIKCmllYV9vcF9leGNfdW5mbDoKCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKCmllYV9vcF9leGl0MjoKCW1vdi5sCQlFWENfUEMoJWE2KSxVU0VSX0ZQSUFSKCVhNikgIyBzZXQgRlBJQVIgdG8gIkN1cnJlbnQgUEMiCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfUEMoJWE2KSAjIHNldCAiTmV4dCBQQyIgaW4gZXhjIGZyYW1lCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgZXhjZXB0aW9uYWwgc3RhdGUKCgl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJuZS5iCQlpZWFfb3BfdHJhY2UJCSMgeWVzCgoJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcwoKIwojIFRoZSBvcGNsYXNzIHR3byBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiCiMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIE1ha2UgdGhlICJjdXJyZW50IiBQQyB0aGUgRlBJQVIgYW5kIHB1dCBpdCBpbgojIHRoZSB0cmFjZSBzdGFjayBmcmFtZSB0aGVuIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KIwojCQkgVU5JTVAgRUEgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogMHgwICogIDB4MGYwCSoJKiAgICBDdXJyZW50CSoKIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKIwkJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMjQJKgojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKIwkJCQkJKioqKioqKioqKioqKioqKioKIwkJCQkJKiAgICAgIFNSCSoKIwkJCQkJKioqKioqKioqKioqKioqKioKaWVhX29wX3RyYWNlOgoJbW92LmwJCSglc3ApLC0oJXNwKQkJIyBzaGlmdCBzdGFjayBmcmFtZSAiZG93biIKCW1vdi53CQkweDgoJXNwKSwweDQoJXNwKQoJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjICJDdXJyZW50IFBDIiBpcyBpbiBGUElBUgoKCWJyYS5sCQlfcmVhbF90cmFjZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZWFfZm1vdm06CglidHN0CQkmMTQsJWQwCQkJIyBjdHJsIG9yIGRhdGEgcmVnCgliZXEudwkJaWVhX2Ztb3ZtX2N0cmwKCmllYV9mbW92bV9kYXRhOgoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZQoJYm5lLmIJCWllYV9mbW92bV9kYXRhX3MKCmllYV9mbW92bV9kYXRhX3U6Cgltb3YubAkJJXVzcCwlYTAKCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc3RvcmUgY3VycmVudCBhNwoJYnNyLmwJCWZtb3ZtX2R5bmFtaWMJCSMgZG8gZHluYW1pYyBmbW92bQoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBsb2FkIHBvc3NpYmx5IG5ldyBhNwoJbW92LmwJCSVhMCwldXNwCQkjIHVwZGF0ZSB1c3AKCWJyYS53CQlpZWFfZm1vdm1fZXhpdAoKaWVhX2Ztb3ZtX2RhdGFfczoKCWNsci5iCQlTUENPTkRfRkxHKCVhNikKCWxlYQkJMHgyK0VYQ19WT0ZGKCVhNiksJWEwCgltb3YubAkJJWEwLEVYQ19BNyglYTYpCglic3IubAkJZm1vdm1fZHluYW1pYwkJIyBkbyBkeW5hbWljIGZtb3ZtCgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCgliZXEudwkJaWVhX2Ztb3ZtX2RhdGFfcHJlZGVjCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWlhN19mbGcKCWJuZS53CQlpZWFfZm1vdm1fZXhpdAoKIyByaWdodCBub3csIGQwID0gdGhlIHNpemUuCiMgdGhlIGRhdGEgaGFzIGJlZW4gZmV0Y2hlZCBmcm9tIHRoZSBzdXBlcnZpc29yIHN0YWNrLCBidXQgd2UgaGF2ZSBub3QKIyBpbmNyZW1lbnRlZCB0aGUgc3RhY2sgcG9pbnRlciBieSB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGJ5dGVzLgojIGRvIGl0IGhlcmUuCmllYV9mbW92bV9kYXRhX3Bvc3RpbmM6CglidHN0CQkmMHg3LEVYQ19TUiglYTYpCglibmUuYgkJaWVhX2Ztb3ZtX2RhdGFfcGlfdHJhY2UKCgltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUiwlYTYsJWQwKQoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksKEVYQ19QQywlYTYsJWQwKQoJbW92LncJCSYweDAwZjAsKEVYQ19WT0ZGLCVhNiwlZDApCgoJbGVhCQkoRVhDX1NSLCVhNiwlZDApLCVhMAoJbW92LmwJCSVhMCxFWENfU1IoJWE2KQoKCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCW1vdi5sCQkoJXNwKSssJXNwCglicmEubAkJX2Zwc3BfZG9uZQoKaWVhX2Ztb3ZtX2RhdGFfcGlfdHJhY2U6Cgltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUi0weDQsJWE2LCVkMCkKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLChFWENfUEMtMHg0LCVhNiwlZDApCgltb3YudwkJJjB4MjAyNCwoRVhDX1ZPRkYtMHg0LCVhNiwlZDApCgltb3YubAkJRVhDX1BDKCVhNiksKEVYQ19WT0ZGKzB4Mi0weDQsJWE2LCVkMCkKCglsZWEJCShFWENfU1ItMHg0LCVhNiwlZDApLCVhMAoJbW92LmwJCSVhMCxFWENfU1IoJWE2KQoKCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCW1vdi5sCQkoJXNwKSssJXNwCglicmEubAkJX3JlYWxfdHJhY2UKCiMgcmlnaHQgbm93LCBkMSA9IHNpemUgYW5kIGQwID0gdGhlIHN0cmcuCmllYV9mbW92bV9kYXRhX3ByZWRlYzoKCW1vdi5iCQklZDEsRVhDX1ZPRkYoJWE2KQkjIHN0b3JlIHN0cmcKCW1vdi5iCQklZDAsMHgxK0VYQ19WT0ZGKCVhNikJIyBzdG9yZSBzaXplCgoJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi5sCQkoJWE2KSwtKCVzcCkJCSMgbWFrZSBhIGNvcHkgb2YgYTYKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgZDEKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLC0oJXNwKQkjIG1ha2UgYSBjb3B5IG9mIE5leHQgUEMKCgljbHIubAkJJWQwCgltb3YuYgkJMHgxK0VYQ19WT0ZGKCVhNiksJWQwCSMgZmV0Y2ggc2l6ZQoJbmVnLmwJCSVkMAkJCSMgZ2V0IG5lZ2F0aXZlIG9mIHNpemUKCglidHN0CQkmMHg3LEVYQ19TUiglYTYpCSMgaXMgdHJhY2UgZW5hYmxlZD8KCWJlcS5iCQlpZWFfZm1vdm1fZGF0YV9wMgoKCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLTB4NCwlYTYsJWQwKQoJbW92LmwJCUVYQ19QQyglYTYpLChFWENfVk9GRi0weDIsJWE2LCVkMCkKCW1vdi5sCQkoJXNwKSssKEVYQ19QQy0weDQsJWE2LCVkMCkKCW1vdi53CQkmMHgyMDI0LChFWENfVk9GRi0weDQsJWE2LCVkMCkKCglwZWEJCSglYTYsJWQwKQkJIyBjcmVhdGUgZmluYWwgc3AKCWJyYS5iCQlpZWFfZm1vdm1fZGF0YV9wMwoKaWVhX2Ztb3ZtX2RhdGFfcDI6Cgltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUiwlYTYsJWQwKQoJbW92LmwJCSglc3ApKywoRVhDX1BDLCVhNiwlZDApCgltb3YudwkJJjB4MDBmMCwoRVhDX1ZPRkYsJWE2LCVkMCkKCglwZWEJCSgweDQsJWE2LCVkMCkJCSMgY3JlYXRlIGZpbmFsIHNwCgppZWFfZm1vdm1fZGF0YV9wMzoKCWNsci5sCQklZDEKCW1vdi5iCQlFWENfVk9GRiglYTYpLCVkMQkjIGZldGNoIHN0cmcKCgl0c3QuYgkJJWQxCglicGwuYgkJZm1fMQoJZm1vdm0ueAkJJjB4ODAsKDB4NCsweDgsJWE2LCVkMCkKCWFkZGkubAkJJjB4YywlZDAKZm1fMToKCWxzbC5iCQkmMHgxLCVkMQoJYnBsLmIJCWZtXzIKCWZtb3ZtLngJCSYweDQwLCgweDQrMHg4LCVhNiwlZDApCglhZGRpLmwJCSYweGMsJWQwCmZtXzI6Cglsc2wuYgkJJjB4MSwlZDEKCWJwbC5iCQlmbV8zCglmbW92bS54CQkmMHgyMCwoMHg0KzB4OCwlYTYsJWQwKQoJYWRkaS5sCQkmMHhjLCVkMApmbV8zOgoJbHNsLmIJCSYweDEsJWQxCglicGwuYgkJZm1fNAoJZm1vdm0ueAkJJjB4MTAsKDB4NCsweDgsJWE2LCVkMCkKCWFkZGkubAkJJjB4YywlZDAKZm1fNDoKCWxzbC5iCQkmMHgxLCVkMQoJYnBsLmIJCWZtXzUKCWZtb3ZtLngJCSYweDA4LCgweDQrMHg4LCVhNiwlZDApCglhZGRpLmwJCSYweGMsJWQwCmZtXzU6Cglsc2wuYgkJJjB4MSwlZDEKCWJwbC5iCQlmbV82CglmbW92bS54CQkmMHgwNCwoMHg0KzB4OCwlYTYsJWQwKQoJYWRkaS5sCQkmMHhjLCVkMApmbV82OgoJbHNsLmIJCSYweDEsJWQxCglicGwuYgkJZm1fNwoJZm1vdm0ueAkJJjB4MDIsKDB4NCsweDgsJWE2LCVkMCkKCWFkZGkubAkJJjB4YywlZDAKZm1fNzoKCWxzbC5iCQkmMHgxLCVkMQoJYnBsLmIJCWZtX2VuZAoJZm1vdm0ueAkJJjB4MDEsKDB4NCsweDgsJWE2LCVkMCkKZm1fZW5kOgoJbW92LmwJCTB4NCglc3ApLCVkMQoJbW92LmwJCTB4OCglc3ApLCVkMAoJbW92LmwJCTB4Yyglc3ApLCVhNgoJbW92LmwJCSglc3ApKywlc3AKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIGVuYWJsZWQ/CgliZXEubAkJX2Zwc3BfZG9uZQoJYnJhLmwJCV9yZWFsX3RyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmllYV9mbW92bV9jdHJsOgoKCWJzci5sCQlmbW92bV9jdHJsCQkjIGxvYWQgY3RybCByZWdzCgppZWFfZm1vdm1fZXhpdDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglidHN0CQkmMHg3LEVYQ19TUiglYTYpCSMgaXMgdHJhY2Ugb24/CglibmUuYgkJaWVhX2Ztb3ZtX3RyYWNlCQkjIHllcwoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19QQyglYTYpICMgc2V0IE5leHQgUEMKCgl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCgoJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcwoKIwojIFRoZSBjb250cm9sIHJlZyBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiCiMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIFRoZSAiQ3VycmVudCBQQyIgZm9yIHRoZSB0cmFjZSBmcmFtZSBpcyB0aGUKIyBQQyBzdGFja2VkIGZvciBVbmltcCBFQS4gVGhlICJOZXh0IFBDIiBpcyBpbiBFWENfRVhUV1BUUi4KIyBBZnRlciBmaXhpbmcgdGhlIHN0YWNrIGZyYW1lLCBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCiMKIwkJIFVOSU1QIEVBIEZSQU1FCQkgICBUUkFDRSBGUkFNRQojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqIDB4MCAqICAweDBmMAkqCSogICAgQ3VycmVudAkqCiMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCiMJCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgICBQQwkqCSogMHgyICogIDB4MDI0CSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCiMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCiMJCQkJCSoqKioqKioqKioqKioqKioqCiMJCQkJCSogICAgICBTUgkqCiMJCQkJCSoqKioqKioqKioqKioqKioqCiMgdGhpcyBhaW4ndCBhIHByZXR0eSBzb2x1dGlvbiwgYnV0IGl0IHdvcmtzOgojIC1yZXN0b3JlIGE2IChub3Qgd2l0aCB1bmxrKQojIC1zaGlmdCBzdGFjayBmcmFtZSBkb3duIG92ZXIgd2hlcmUgb2xkIGE2IHVzZWQgdG8gYmUKIyAtYWRkIExPQ0FMX1NJWkUgdG8gc3RhY2sgcG9pbnRlcgppZWFfZm1vdm1fdHJhY2U6Cgltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgoJbW92LncJCUVYQ19TUitMT0NBTF9TSVpFKCVzcCksMHgwK0xPQ0FMX1NJWkUoJXNwKQoJbW92LmwJCUVYQ19QQytMT0NBTF9TSVpFKCVzcCksMHg4K0xPQ0FMX1NJWkUoJXNwKQoJbW92LmwJCUVYQ19FWFRXUFRSK0xPQ0FMX1NJWkUoJXNwKSwweDIrTE9DQUxfU0laRSglc3ApCgltb3YudwkJJjB4MjAyNCwweDYrTE9DQUxfU0laRSglc3ApICMgc3RrIGZtdCA9IDB4Mjsgdm9mZiA9IDB4MDI0CglhZGQubAkJJkxPQ0FMX1NJWkUsJXNwCQkjIGNsZWFyIHN0YWNrIGZyYW1lCgoJYnJhLmwJCV9yZWFsX3RyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVGhlIEZQVSBpcyBkaXNhYmxlZCBhbmQgc28gd2Ugc2hvdWxkIHJlYWxseSBoYXZlIHRha2VuIHRoZSAiTGluZQojIEYgRW11bGF0b3IiIGV4Y2VwdGlvbi4gU28sIGhlcmUgd2UgY3JlYXRlIGFuIDgtd29yZCBzdGFjayBmcmFtZQojIGZyb20gb3VyIDQtd29yZCBzdGFjayBmcmFtZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGNhbGN1bGF0ZSB0aGUgbGVuZ3RoCiMgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHRvIGdldCB0aGUgIm5leHQgUEMiLiBUaGlzIGlzIHRyaXZpYWwgZm9yCiMgaW1tZWRpYXRlIG9wZXJhbmRzIGJ1dCByZXF1aXJlcyBzb21lIGV4dHJhIHdvcmsgZm9yIGZtb3ZtIGR5bmFtaWMKIyB3aGljaCBjYW4gdXNlIG1vc3QgYWRkcmVzc2luZyBtb2Rlcy4KaWVhX2Rpc2FibGVkOgoJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAoKCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQoKIyBQQyBvZiBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgUEMgaW4gdGhlIGZyYW1lCgltb3YubAkJRVhDX1BDKCVhNiksRVhDX0VYVFdQVFIoJWE2KQoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCSMgc3RvcmUgT1BXT1JEIGFuZCBFWFRXT1JECgoJdHN0LncJCSVkMAkJCSMgaXMgaW5zdHIgZm1vdm0/CglibWkuYgkJaWVhX2Rpc19mbW92bQkJIyB5ZXMKIyBpbnN0cnVjdGlvbiBpcyB1c2luZyBhbiBleHRlbmRlZCBwcmVjaXNpb24gaW1tZWRpYXRlIG9wZXJhbmQuIHRoZXJlZm9yZSwKIyB0aGUgdG90YWwgaW5zdHJ1Y3Rpb24gbGVuZ3RoIGlzIDE2IGJ5dGVzLgppZWFfZGlzX2ltbWVkOgoJbW92LmwJCSYweDEwLCVkMAkJIyAxNiBieXRlcyBvZiBpbnN0cnVjdGlvbgoJYnJhLmIJCWllYV9kaXNfY29udAppZWFfZGlzX2Ztb3ZtOgoJYnRzdAkJJjB4ZSwlZDAJCSMgaXMgaW5zdHIgZm1vdm0gY3RybAoJYm5lLmIJCWllYV9kaXNfZm1vdm1fZGF0YQkjIG5vCiMgdGhlIGluc3RydWN0aW9uIGlzIGEgZm1vdm0ubCB3aXRoIDIgb3IgMyByZWdpc3RlcnMuCgliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMQoJbW92LmwJCSYweGMsJWQwCgljbXBpLmIJCSVkMSwmMHg3CQkjIG1vdmUgYWxsIHJlZ3M/CglibmUuYgkJaWVhX2Rpc19jb250CglhZGRxLmwJCSYweDQsJWQwCglicmEuYgkJaWVhX2Rpc19jb250CiMgdGhlIGluc3RydWN0aW9uIGlzIGFuIGZtb3ZtLnggZHluYW1pYyB3aGljaCBjYW4gdXNlIG1hbnkgYWRkcmVzc2luZwojIG1vZGVzIGFuZCB0aHVzIGNhbiBoYXZlIHNldmVyYWwgZGlmZmVyZW50IHRvdGFsIGluc3RydWN0aW9uIGxlbmd0aHMuCiMgY2FsbCBmbW92bV9jYWxjX2VhIHdoaWNoIHdpbGwgZ28gdGhyb3VnaCB0aGUgZWEgY2FsYyBwcm9jZXNzIGFuZCwKIyBhcyBhIGJ5LXByb2R1Y3QsIHdpbGwgdGVsbCB1cyBob3cgbG9uZyB0aGUgaW5zdHJ1Y3Rpb24gaXMuCmllYV9kaXNfZm1vdm1fZGF0YToKCWNsci5sCQklZDAKCWJzci5sCQlmbW92bV9jYWxjX2VhCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlZDAKCXN1Yi5sCQlFWENfUEMoJWE2KSwlZDAKaWVhX2Rpc19jb250OgoJbW92LncJCSVkMCxFWENfVk9GRiglYTYpCSMgc3RvcmUgc3RhY2sgc2hpZnQgdmFsdWUKCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CgojIGhlcmUsIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUgOC13b3JkIGZyYW1lIGZyb20gdGhlIDQtd29yZCBmcmFtZSwKIyB3aXRoIHRoZSAibmV4dCBQQyIgYXMgYWRkaXRpb25hbCBpbmZvLgojIHRoZSA8ZWE+IGZpZWxkIGlzIGxldCBhcyB1bmRlZmluZWQuCglzdWJxLmwJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgbmV3IHN0YWNrCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCgltb3YudwkJMHhjKCVzcCksMHg0KCVzcCkJIyBtb3ZlIFNSCgltb3YubAkJMHhlKCVzcCksMHg2KCVzcCkJIyBtb3ZlIEN1cnJlbnQgUEMKCWNsci5sCQklZDAKCW1vdi53CQkweDEyKCVzcCksJWQwCgltb3YubAkJMHg2KCVzcCksMHgxMCglc3ApCSMgbW92ZSBDdXJyZW50IFBDCglhZGQubAkJJWQwLDB4Niglc3ApCQkjIG1ha2UgTmV4dCBQQwoJbW92LncJCSYweDQwMmMsMHhhKCVzcCkJIyBpbnNlcnQgb2Zmc2V0LGZyYW1lIGZvcm1hdAoJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAoKCWJyYS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKCiMjIyMjIyMjIyMKCmllYV9pYWNjOgoJbW92YwkJJXBjciwlZDAKCWJ0c3QJCSYweDEsJWQwCglibmUuYgkJaWVhX2lhY2NfY29udAoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMSBvbiBzdGFjawppZWFfaWFjY19jb250OgoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoKCXN1YnEudwkJJjB4OCwlc3AJCSMgbWFrZSBzdGFjayBmcmFtZSBiaWdnZXIKCW1vdi5sCQkweDgoJXNwKSwoJXNwKQkJIyBzdG9yZSBTUixoaShQQykKCW1vdi53CQkweGMoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQoJbW92LncJCSYweDQwMDgsMHg2KCVzcCkJIyBzdG9yZSB2b2ZmCgltb3YubAkJMHgyKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBlYQoJbW92LmwJCSYweDA5NDI4MDAxLDB4Yyglc3ApCSMgc3RvcmUgZnNsdwoKaWVhX2FjY19kb25lOgoJYnRzdAkJJjB4NSwoJXNwKQkJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KCWJlcS5iCQlpZWFfYWNjX2RvbmUyCQkjIHVzZXIKCWJzZXQJCSYweDIsMHhkKCVzcCkJCSMgc2V0IHN1cGVydmlzb3IgVE0gYml0CgppZWFfYWNjX2RvbmUyOgoJYnJhLmwJCV9yZWFsX2FjY2VzcwoKaWVhX2RhY2M6CglsZWEJCS1MT0NBTF9TSVpFKCVhNiksJXNwCgoJbW92YwkJJXBjciwlZDEKCWJ0c3QJCSYweDEsJWQxCglibmUuYgkJaWVhX2RhY2NfY29udAoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxIG9uIHN0YWNrCglmbW92bS5sCQlMT0NBTF9TSVpFK1VTRVJfRlBDUiglc3ApLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCmllYV9kYWNjX2NvbnQ6Cgltb3YubAkJKCVhNiksJWE2CgoJbW92LmwJCTB4NCtMT0NBTF9TSVpFKCVzcCksLTB4OCsweDQrTE9DQUxfU0laRSglc3ApCgltb3YudwkJMHg4K0xPQ0FMX1NJWkUoJXNwKSwtMHg4KzB4OCtMT0NBTF9TSVpFKCVzcCkKCW1vdi53CQkmMHg0MDA4LC0weDgrMHhhK0xPQ0FMX1NJWkUoJXNwKQoJbW92LmwJCSVhMCwtMHg4KzB4YytMT0NBTF9TSVpFKCVzcCkKCW1vdi53CQklZDAsLTB4OCsweDEwK0xPQ0FMX1NJWkUoJXNwKQoJbW92LncJCSYweDAwMDEsLTB4OCsweDEyK0xPQ0FMX1NJWkUoJXNwKQoKCW1vdm0ubAkJTE9DQUxfU0laRStFWENfRFJFR1MoJXNwKSwmMHgwMzAzICMgcmVzdG9yZSBkMC1kMS9hMC1hMQoJYWRkLncJCSZMT0NBTF9TSVpFLTB4NCwlc3AKCglicmEuYgkJaWVhX2FjY19kb25lCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF9vcGVycigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBPcGVyciBleGNlcHRpb24uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgT3BlcmFuZCBFcnJvciBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCiMJX3JlYWxfb3BlcnIoKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIG9wZXJyIGhhbmRsZXIJIwojCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHN0b3JlIGRhdGEgdG8gbWVtIChvcGNsYXNzIDMpCSMKIwlzdG9yZV9kcmVnX3tiLHcsbH0oKSAtIHN0b3JlIGRhdGEgdG8gZGF0YSByZWdmaWxlIChvcGNsYXNzIDMpCSMKIwlmYWNjX291dF97Yix3LGx9KCkgLSBzdG9yZSB0byBtZW1vcnkgdG9vayBhY2Nlc3MgZXJyb3IgKG9wY2wgMykJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBPcGVyciBleGNlcHRpb24gZnJhbWUJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vIGFjY2VzcyBlcnJvcjoJCQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBPcGVyciBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlIGdvYWwJIwojIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfb3BlcnIoKS4gQnV0LCBvbiB0aGUgMDYwLAkjCiMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9uIHRha2luZyB0aGlzIGV4Y2VwdGlvbiwgdGhlCSMKIyBpbnB1dCBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBtYXkgYmUgaW5jb3JyZWN0IGZvciBzb21lIGNhc2VzCSMKIyBhbmQgbmVlZHMgdG8gYmUgY29ycmVjdGVkLiBUaGlzIGhhbmRsZXIgY2FsbHMgZml4X3NrZXdlZF9vcHMoKSB0bwkjCiMgZG8ganVzdCB0aGlzIGFuZCB0aGVuIGV4aXRzIHRocm91Z2ggX3JlYWxfb3BlcnIoKS4JCQkjCiMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCiMgb3BlcnIgcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JIwojIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJlZm9yZSBmaW5hbGx5IGV4aXRpbmcgdGhyb3VnaAkjCiMgX3JlYWxfaW5leCgpLiBUaGUgbW92ZSBvdXQsIGlmIHRvIG1lbW9yeSwgaXMgcGVyZm9ybWVkIHVzaW5nCQkjCiMgX21lbV93cml0ZSgpICJjYWxsb3V0IiByb3V0aW5lcyB0aGF0IG1heSByZXR1cm4gYSBmYWlsaW5nIHJlc3VsdC4JIwojIEluIHRoaXMgc3BlY2lhbCBjYXNlLCB0aGUgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCBmYWNjX291dCgpCSMKIyB3aGljaCBjcmVhdGVzIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IG9wZXJyCSMKIyBzdGFjayBmcmFtZS4JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Zwc3Bfb3BlcnIKX2Zwc3Bfb3BlcnI6CgoJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQoKCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCgojIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglidHN0CQkmMTMsJWQwCQkJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CglibmUuYgkJZm9wZXJyX291dAkJIyBmbW92ZSBvdXQKCgojIGhlcmUsIHdlIHNpbXBseSBzZWUgaWYgdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG5lZWRzIHRvIGJlICJ1bnNrZXdlZCIuCiMgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBmb3Igb3BjbGFzcyB0d28gb3BlcmF0aW9ucyB3aXRoIGEgc291cmNlIGluZmluaXR5IG9yCiMgZGVub3JtIG9wZXJhbmQgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LiBOQU5zIGFsc28gYmVjb21lIHNrZXdlZCwgYnV0IGNhbid0CiMgY2F1c2UgYW4gb3BlcnIgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlbSBoZXJlLgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAoJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKCmZvcGVycl9leGl0OgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCgoJdW5sawkJJWE2CglicmEubAkJX3JlYWxfb3BlcnIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAojIG9wZXJhbmQgZXJyb3IgZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KIyB0aGUgdXNlciBvcGVyYW5kIGVycm9yIGhhbmRsZXIuCiMKIyBieXRlLCB3b3JkLCBhbmQgbG9uZyBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcwojIHRocm91Z2ggaGVyZS4gd2Ugc2ltcGx5IG5lZWQgdG8gdGVzdCB0aGUgc2lnbiBvZiB0aGUgc3JjCiMgb3BlcmFuZCBhbmQgc2F2ZSB0aGUgYXBwcm9wcmlhdGUgbWluaW11bSBvciBtYXhpbXVtIGludGVnZXIgdmFsdWUKIyB0byB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgYXMgcG9pbnRlZCB0byBieSB0aGUgc3RhY2tlZCBlZmZlY3RpdmUgYWRkcmVzcy4KIwojIGFsdGhvdWdoIHBhY2tlZCBvcGNsYXNzIHRocmVlIG9wZXJhdGlvbnMgY2FuIHRha2Ugb3BlcmFuZCBlcnJvcgojIGV4Y2VwdGlvbnMsIHRoZXkgd29uJ3QgcGFzcyB0aHJvdWdoIGhlcmUgc2luY2UgdGhleSBhcmUgY2F1Z2h0CiMgZmlyc3QgYnkgdGhlIHVuc3VwcG9ydGVkIGRhdGEgZm9ybWF0IGV4Y2VwdGlvbiBoYW5kbGVyLiB0aGF0IGhhbmRsZXIKIyBzZW5kcyB0aGVtIGRpcmVjdGx5IHRvIF9yZWFsX29wZXJyKCkgaWYgbmVjZXNzYXJ5LgojCmZvcGVycl9vdXQ6CgoJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMQkjIGZldGNoIGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQxCgljbXBpLncJCSVkMSwmMHg3ZmZmCglibmUuYgkJZm9wZXJyX291dF9ub3RfcW5hbgojIHRoZSBvcGVyYW5kIGlzIGVpdGhlciBhbiBpbmZpbml0eSBvciBhIFFOQU4uCgl0c3QubAkJRlBfU1JDX0xPKCVhNikKCWJuZS5iCQlmb3BlcnJfb3V0X3FuYW4KCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEKCWFuZGkubAkJJjB4N2ZmZmZmZmYsJWQxCgliZXEuYgkJZm9wZXJyX291dF9ub3RfcW5hbgpmb3BlcnJfb3V0X3FuYW46Cgltb3YubAkJRlBfU1JDX0hJKCVhNiksTF9TQ1IxKCVhNikKCWJyYS5iCQlmb3BlcnJfb3V0X2ptcAoKZm9wZXJyX291dF9ub3RfcW5hbjoKCW1vdi5sCQkmMHg3ZmZmZmZmZiwlZDEKCXRzdC5iCQlGUF9TUkNfRVgoJWE2KQoJYnBsLmIJCWZvcGVycl9vdXRfbm90X3FuYW4yCglhZGRxLmwJCSYweDEsJWQxCmZvcGVycl9vdXRfbm90X3FuYW4yOgoJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQoKZm9wZXJyX291dF9qbXA6CgliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMAkJIyBleHRyYWN0IGRzdCBmb3JtYXQgZmllbGQKCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IDxlYT4gbW9kZSxyZWcKCW1vdi53CQkodGJsX29wZXJyLmIsJXBjLCVkMC53KjIpLCVhMAoJam1wCQkodGJsX29wZXJyLmIsJXBjLCVhMCkKCnRibF9vcGVycjoKCXNob3J0CQlmb3BlcnJfb3V0X2wgLSB0Ymxfb3BlcnIgIyBsb25nIHdvcmQgaW50ZWdlcgoJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIHNnbCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBleHQgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCglzaG9ydAkJZm9wZXJyX2V4aXQgIC0gdGJsX29wZXJyICMgcGFja2VkIHdvbid0IGVudGVyIGhlcmUKCXNob3J0CQlmb3BlcnJfb3V0X3cgLSB0Ymxfb3BlcnIgIyB3b3JkIGludGVnZXIKCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBkYmwgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCglzaG9ydAkJZm9wZXJyX291dF9iIC0gdGJsX29wZXJyICMgYnl0ZSBpbnRlZ2VyCglzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgcGFja2VkIHdvbid0IGVudGVyIGhlcmUKCmZvcGVycl9vdXRfYjoKCW1vdi5iCQlMX1NDUjEoJWE2KSwlZDAJCSMgbG9hZCBwb3NpdGl2ZSBkZWZhdWx0IHJlc3VsdAoJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KCWJsZS5iCQlmb3BlcnJfb3V0X2Jfc2F2ZV9kbgkjIHllcwoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0Cglic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9iCQkjIHllcwoKCWJyYS53CQlmb3BlcnJfZXhpdApmb3BlcnJfb3V0X2Jfc2F2ZV9kbjoKCWFuZGkudwkJJjB4MDAwNywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2IJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKCWJyYS53CQlmb3BlcnJfZXhpdAoKZm9wZXJyX291dF93OgoJbW92LncJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CgljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPwoJYmxlLmIJCWZvcGVycl9vdXRfd19zYXZlX2RuCSMgeWVzCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKCWJzci5sCQlfZG1lbV93cml0ZV93b3JkCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCgoJYnJhLncJCWZvcGVycl9leGl0CmZvcGVycl9vdXRfd19zYXZlX2RuOgoJYW5kaS53CQkmMHgwMDA3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfdwkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQoJYnJhLncJCWZvcGVycl9leGl0Cgpmb3BlcnJfb3V0X2w6Cgltb3YubAkJTF9TQ1IxKCVhNiksJWQwCQkjIGxvYWQgcG9zaXRpdmUgZGVmYXVsdCByZXN1bHQKCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CglibGUuYgkJZm9wZXJyX291dF9sX3NhdmVfZG4JIyB5ZXMKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKCglicmEudwkJZm9wZXJyX2V4aXQKZm9wZXJyX291dF9sX3NhdmVfZG46CglhbmRpLncJCSYweDAwMDcsJWQxCglic3IubAkJc3RvcmVfZHJlZ19sCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCglicmEudwkJZm9wZXJyX2V4aXQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX3NuYW4oKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgU05BTiBleGNlcHRpb24uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgU2lnbmFsbGluZyBOQU4gZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIwojCV9yZWFsX3NuYW4oKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIFNOQU4gaGFuZGxlcgkjCiMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gc3RvcmUgZGF0YSB0byBtZW0gKG9wY2xhc3MgMykJIwojCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2ZpbGUgKG9wY2xhc3MgMykJIwojCWZhY2Nfb3V0X3tiLHcsbCxkLHh9KCkgLSBzdG9yZSB0byBtZW0gdG9vayBhY2MgZXJyb3IgKG9wY2wgMykJIwojCV9jYWxjX2VhX2ZvdXQoKSAtIGZpeCBBbiBpZiA8ZWE+IGlzIC0oKSBvciAoKSs7IGFsc28gZ2V0IDxlYT4JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBTTkFOIGV4Y2VwdGlvbiBmcmFtZQkJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vIGFjY2VzcyBlcnJvcjoJCQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBTTkFOIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCiMgaXMgdG8gZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9zbmFuKCkuIEJ1dCwgb24gdGhlIDA2MCwJIwojIGZvciBvcGNsYXNzIHplcm8gYW5kIHR3byBpbnN0cnVjdGlvbnMgdGFraW5nIHRoaXMgZXhjZXB0aW9uLCB0aGUJIwojIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG1heSBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMJIwojIGFuZCBuZWVkcyB0byBiZSBjb3JyZWN0ZWQuIFRoaXMgaGFuZGxlciBjYWxscyBmaXhfc2tld2VkX29wcygpIHRvCSMKIyBkbyBqdXN0IHRoaXMgYW5kIHRoZW4gZXhpdHMgdGhyb3VnaCBfcmVhbF9zbmFuKCkuCQkJIwojCUZvciBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb25zLCB0aGUgMDYwIGRvZXNuJ3Qgc3RvcmUgdGhlIGRlZmF1bHQJIwojIFNOQU4gcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JCSMKIyBUaGlzIGNvZGUgbXVzdCBlbXVsYXRlIHRoZSBtb3ZlIG91dCBiZWZvcmUgZmluYWxseSBleGl0aW5nIHRocm91Z2gJIwojIF9yZWFsX3NuYW4oKS4gVGhlIG1vdmUgb3V0LCBpZiB0byBtZW1vcnksIGlzIHBlcmZvcm1lZCB1c2luZwkJIwojIF9tZW1fd3JpdGUoKSAiY2FsbG91dCIgcm91dGluZXMgdGhhdCBtYXkgcmV0dXJuIGEgZmFpbGluZyByZXN1bHQuCSMKIyBJbiB0aGlzIHNwZWNpYWwgY2FzZSwgdGhlIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggZmFjY19vdXQoKQkjCiMgd2hpY2ggY3JlYXRlcyBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBTTkFOCSMKIyBzdGFjayBmcmFtZS4JCQkJCQkJCSMKIwlGb3IgdGhlIGNhc2Ugb2YgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MgMyBpbnN0cnVjdGlvbiwJIwojIGlmIHRoZSBlZmZlY3RpdmUgYWRkcmVzc2luZyBtb2RlIHdhcyAtKCkgb3IgKCkrLCB0aGVuIHRoZSBhZGRyZXNzCSMKIyByZWdpc3RlciBtdXN0IGdldCB1cGRhdGVkIGJ5IGNhbGxpbmcgX2NhbGNfZWFfZm91dCgpLiBJZiB0aGUgPGVhPgkjCiMgd2FzIC0oYTcpIGZyb20gc3VwZXJ2aXNvciBtb2RlLCB0aGVuIHRoZSBleGNlcHRpb24gZnJhbWUgY3VycmVudGx5CSMKIyBvbiB0aGUgc3lzdGVtIHN0YWNrIG11c3QgYmUgY2FyZWZ1bGx5IG1vdmVkICJkb3duIiB0byBtYWtlIHJvb20JIwojIGZvciB0aGUgb3BlcmFuZCBiZWluZyBtb3ZlZC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9mcHNwX3NuYW4KX2Zwc3Bfc25hbjoKCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCiMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWJ0c3QJCSYxMywlZDAJCQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KCWJuZS53CQlmc25hbl9vdXQJCSMgZm1vdmUgb3V0CgoKIyBoZXJlLCB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBuZWVkcyB0byBiZSAidW5za2V3ZWQiLgojIHRoaXMgd291bGQgYmUgdGhlIGNhc2UgZm9yIG9wY2xhc3MgdHdvIG9wZXJhdGlvbnMgd2l0aCBhIHNvdXJjZSBpbmZpbml0eSBvcgojIGRlbm9ybSBvcGVyYW5kIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4gTkFOcyBhbHNvIGJlY29tZSBza2V3ZWQgYW5kIG11c3QgYmUKIyBmaXhlZCBoZXJlLgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAoJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKCmZzbmFuX2V4aXQ6CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikKCgl1bmxrCQklYTYKCWJyYS5sCQlfcmVhbF9zbmFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gbWVtb3J5IG9uIGVuYWJsZWQKIyBzbmFuIGV4Y2VwdGlvbnMuIHdlIGRvIHRoaXMgaGVyZSBiZWZvcmUgcGFzc2luZyBjb250cm9sIHRvCiMgdGhlIHVzZXIgc25hbiBoYW5kbGVyLgojCiMgYnl0ZSwgd29yZCwgbG9uZywgYW5kIHBhY2tlZCBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcwojIHRocm91Z2ggaGVyZS4gc2luY2UgcGFja2VkIGZvcm1hdCBvcGVyYXRpb25zIGFscmVhZHkgd2VyZSBoYW5kbGVkIGJ5CiMgZnBzcF91bnN1cHAoKSwgdGhlbiB3ZSBuZWVkIHRvIGRvIG5vdGhpbmcgZWxzZSBmb3IgdGhlbSBoZXJlLgojIGZvciBieXRlLCB3b3JkLCBhbmQgbG9uZywgd2Ugc2ltcGx5IG5lZWQgdG8gdGVzdCB0aGUgc2lnbiBvZiB0aGUgc3JjCiMgb3BlcmFuZCBhbmQgc2F2ZSB0aGUgYXBwcm9wcmlhdGUgbWluaW11bSBvciBtYXhpbXVtIGludGVnZXIgdmFsdWUKIyB0byB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgYXMgcG9pbnRlZCB0byBieSB0aGUgc3RhY2tlZCBlZmZlY3RpdmUgYWRkcmVzcy4KIwpmc25hbl9vdXQ6CgoJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZXh0cmFjdCBkc3QgZm9ybWF0IGZpZWxkCgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCA8ZWE+IG1vZGUscmVnCgltb3YudwkJKHRibF9zbmFuLmIsJXBjLCVkMC53KjIpLCVhMAoJam1wCQkodGJsX3NuYW4uYiwlcGMsJWEwKQoKdGJsX3NuYW46CglzaG9ydAkJZnNuYW5fb3V0X2wgLSB0Ymxfc25hbiAjIGxvbmcgd29yZCBpbnRlZ2VyCglzaG9ydAkJZnNuYW5fb3V0X3MgLSB0Ymxfc25hbiAjIHNnbCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KCXNob3J0CQlmc25hbl9vdXRfeCAtIHRibF9zbmFuICMgZXh0IHByZWMgc2hvdWxkbid0IGhhcHBlbgoJc2hvcnQJCXRibF9zbmFuICAgIC0gdGJsX3NuYW4gIyBwYWNrZWQgbmVlZHMgbm8gaGVscAoJc2hvcnQJCWZzbmFuX291dF93IC0gdGJsX3NuYW4gIyB3b3JkIGludGVnZXIKCXNob3J0CQlmc25hbl9vdXRfZCAtIHRibF9zbmFuICMgZGJsIHByZWMgc2hvdWxkbid0IGhhcHBlbgoJc2hvcnQJCWZzbmFuX291dF9iIC0gdGJsX3NuYW4gIyBieXRlIGludGVnZXIKCXNob3J0CQl0Ymxfc25hbiAgICAtIHRibF9zbmFuICMgcGFja2VkIG5lZWRzIG5vIGhlbHAKCmZzbmFuX291dF9iOgoJbW92LmIJCUZQX1NSQ19ISSglYTYpLCVkMAkjIGxvYWQgdXBwZXIgYnl0ZSBvZiBTTkFOCglic2V0CQkmNiwlZDAJCQkjIHNldCBTTkFOIGJpdAoJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KCWJsZS5iCQlmc25hbl9vdXRfYl9kbgkJIyB5ZXMKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfYgkJIyB5ZXMKCglicmEudwkJZnNuYW5fZXhpdApmc25hbl9vdXRfYl9kbjoKCWFuZGkudwkJJjB4MDAwNywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2IJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKCWJyYS53CQlmc25hbl9leGl0Cgpmc25hbl9vdXRfdzoKCW1vdi53CQlGUF9TUkNfSEkoJWE2KSwlZDAJIyBsb2FkIHVwcGVyIHdvcmQgb2YgU05BTgoJYnNldAkJJjE0LCVkMAkJCSMgc2V0IFNOQU4gYml0CgljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPwoJYmxlLmIJCWZzbmFuX291dF93X2RuCQkjIHllcwoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0Cglic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF93CQkjIHllcwoKCWJyYS53CQlmc25hbl9leGl0CmZzbmFuX291dF93X2RuOgoJYW5kaS53CQkmMHgwMDA3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfdwkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQoJYnJhLncJCWZzbmFuX2V4aXQKCmZzbmFuX291dF9sOgoJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMAkjIGxvYWQgdXBwZXIgbG9uZ3dvcmQgb2YgU05BTgoJYnNldAkJJjMwLCVkMAkJCSMgc2V0IFNOQU4gYml0CgljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPwoJYmxlLmIJCWZzbmFuX291dF9sX2RuCQkjIHllcwoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0Cglic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcwoKCWJyYS53CQlmc25hbl9leGl0CmZzbmFuX291dF9sX2RuOgoJYW5kaS53CQkmMHgwMDA3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQoJYnJhLncJCWZzbmFuX2V4aXQKCmZzbmFuX291dF9zOgoJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KCWJsZS5iCQlmc25hbl9vdXRfZF9kbgkJIyB5ZXMKCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQwCQkjIGtlZXAgc2lnbgoJb3JpLmwJCSYweDdmYzAwMDAwLCVkMAkJIyBpbnNlcnQgbmV3IGV4cG9uZW50LFNOQU4gYml0Cgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBtYW50aXNzYQoJbHNyLmwJCSYweDgsJWQxCQkjIHNoaWZ0IG1hbnRpc3NhIGZvciBzZ2wKCW9yLmwJCSVkMSwlZDAJCQkjIGNyZWF0ZSBzZ2wgU05BTgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0Cglic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcwoKCWJyYS53CQlmc25hbl9leGl0CmZzbmFuX291dF9kX2RuOgoJbW92LmwJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIFNOQU4gc2lnbgoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCglvcmkubAkJJjB4N2ZjMDAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKCW1vdi5sCQklZDEsLSglc3ApCgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBtYW50aXNzYQoJbHNyLmwJCSYweDgsJWQxCQkjIHNoaWZ0IG1hbnRpc3NhIGZvciBzZ2wKCW9yLmwJCSVkMSwlZDAJCQkjIGNyZWF0ZSBzZ2wgU05BTgoJbW92LmwJCSglc3ApKywlZDEKCWFuZGkudwkJJjB4MDAwNywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2wJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKCWJyYS53CQlmc25hbl9leGl0Cgpmc25hbl9vdXRfZDoKCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQwCQkjIGtlZXAgc2lnbgoJb3JpLmwJCSYweDdmZjgwMDAwLCVkMAkJIyBpbnNlcnQgbmV3IGV4cG9uZW50LFNOQU4gYml0Cgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBoaSBtYW50aXNzYQoJbW92LmwJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBzdG9yZSB0byB0ZW1wIHNwYWNlCgltb3YubAkJJjExLCVkMAkJCSMgbG9hZCBzaGlmdCBhbXQKCWxzci5sCQklZDAsJWQxCglvci5sCQklZDEsRlBfU0NSMF9FWCglYTYpCSMgY3JlYXRlIGRibCBoaQoJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGxvYWQgaGkgbWFudGlzc2EKCWFuZGkubAkJJjB4MDAwMDA3ZmYsJWQxCglyb3IubAkJJWQwLCVkMQoJbW92LmwJCSVkMSxGUF9TQ1IwX0hJKCVhNikJIyBzdG9yZSB0byB0ZW1wIHNwYWNlCgltb3YubAkJRlBfU1JDX0xPKCVhNiksJWQxCSMgbG9hZCBsbyBtYW50aXNzYQoJbHNyLmwJCSVkMCwlZDEKCW9yLmwJCSVkMSxGUF9TQ1IwX0hJKCVhNikJIyBjcmVhdGUgZGJsIGxvCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAoJbW92LmwJCUVYQ19FQSglYTYpLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgoJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBzaXplIG9mIDggYnl0ZXMKCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKCglicmEudwkJZnNuYW5fZXhpdAoKIyBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uLCBpZiB0aGUgYWRkcmVzc2luZyBtb2RlIGlzIHByZS1kZWNyZW1lbnQgb3IKIyBwb3N0LWluY3JlbWVudCwgdGhlbiB0aGUgYWRkcmVzcyByZWdpc3RlciBkaWQgbm90IGdldCB1cGRhdGVkLgojIGluIGFkZGl0aW9uLCBmb3IgcHJlLWRlY3JlbWVudCwgdGhlIHN0YWNrZWQgPGVhPiBpcyBpbmNvcnJlY3QuCmZzbmFuX291dF94OgoJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQkJIyBjbGVhciBzcGVjaWFsIGNhc2UgZmxhZwoKCW1vdi53CQlGUF9TUkNfRVgoJWE2KSxGUF9TQ1IwX0VYKCVhNikKCWNsci53CQkyK0ZQX1NDUjAoJWE2KQoJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMAoJYnNldAkJJjMwLCVkMAoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxGUF9TQ1IwX0xPKCVhNikKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgc3VwZXJ2aXNvciBtb2RlIGV4Y2VwdGlvbj8KCWJuZS5iCQlmc25hbl9vdXRfeF9zCQkjIHllcwoKCW1vdi5sCQkldXNwLCVhMAkJIyBmZXRjaCB1c2VyIHN0YWNrIHBvaW50ZXIKCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjayBmb3IgY2FsY19lYSgpCgltb3YubAkJKCVhNiksRVhDX0E2KCVhNikKCglic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaW5kIHRoZSBjb3JyZWN0IGVhLHVwZGF0ZSBBbgoJbW92LmwJCSVhMCwlYTEKCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgc3RhY2sgY29ycmVjdCA8ZWE+CgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAoJbW92LmwJCSVhMCwldXNwCQkjIHJlc3RvcmUgdXNlciBzdGFjayBwb2ludGVyCgltb3YubAkJRVhDX0E2KCVhNiksKCVhNikKCmZzbmFuX291dF94X3NhdmU6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAoJbW92cS5sCQkmMHhjLCVkMAkJIyBwYXNzOiBzaXplIG9mIGV4dGVuZGVkCglic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X3gJCSMgeWVzCgoJYnJhLncJCWZzbmFuX2V4aXQKCmZzbmFuX291dF94X3M6Cgltb3YubAkJKCVhNiksRVhDX0E2KCVhNikKCglic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaW5kIHRoZSBjb3JyZWN0IGVhLHVwZGF0ZSBBbgoJbW92LmwJCSVhMCwlYTEKCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgc3RhY2sgY29ycmVjdCA8ZWE+CgoJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgaXMgPGVhPiBtb2RlIC0oYTcpPwoJYm5lLmIJCWZzbmFuX291dF94X3NhdmUJIyBubwoKIyB0aGUgb3BlcmF0aW9uIHdhcyAiZm1vdmUueCBTTkFOLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQoKCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19QQysweDIoJXNwKSxMT0NBTF9TSVpFK0VYQ19QQysweDItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCgoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NDUjBfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19QQysweDIoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9MTyglc3ApLExPQ0FMX1NJWkUrRVhDX0VBKCVzcCkKCglhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAoKCWJyYS5sCQlfcmVhbF9zbmFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF9pbmV4KCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIEluZXhhY3QgZXhjZXB0aW9uLgkjCiMJCQkJCQkJCQkjCiMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIwojCUZQIEluZXhhY3QgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIwojCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIwojCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCiMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIwojCXNtb3ZjcigpIC0gZW11bGF0ZSBhbiAiZm1vdmNyIiBpbnN0cnVjdGlvbgkJCSMKIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIwojCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIGluZXhhY3QgaGFuZGxlcgkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIEluZXhhY3QgZXhjZXB0aW9uIGZyYW1lCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIEluZXhhY3QgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsCSMKIyBpcyB0byBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX2luZXgoKS4gQnV0LCBvbiB0aGUgMDYwLAkjCiMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9uIHRha2luZyB0aGlzIGV4Y2VwdGlvbiwgdGhlCSMKIyBoYXJkd2FyZSBkb2Vzbid0IHN0b3JlIHRoZSBjb3JyZWN0IHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gRlAJIwojIHJlZ2lzdGVyIGFzIGRpZCB0aGUgJzA0MCBhbmQgJzg4MS8yLiBUaGlzIGhhbmRsZXIgbXVzdCBlbXVsYXRlIHRoZQkjCiMgaW5zdHJ1Y3Rpb24gaW4gb3JkZXIgdG8gZ2V0IHRoaXMgdmFsdWUgYW5kIHRoZW4gc3RvcmUgaXQgdG8gdGhlCSMKIyBjb3JyZWN0IHJlZ2lzdGVyIGJlZm9yZSBjYWxsaW5nIF9yZWFsX2luZXgoKS4JCQkJIwojCUZvciBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb25zLCB0aGUgMDYwIGRvZXNuJ3Qgc3RvcmUgdGhlIGRlZmF1bHQJIwojIGluZXhhY3QgcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JIwojIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJ5IGNhbGxpbmcgZm91dCgpIGJlZm9yZSBmaW5hbGx5CSMKIyBleGl0aW5nIHRocm91Z2ggX3JlYWxfaW5leCgpLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Zwc3BfaW5leApfZnBzcF9pbmV4OgoKCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCglmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCgoJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQoJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjawoKIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PwoJYm5lLncJCWZpbmV4X291dAkJIyBmbW92ZSBvdXQKCgojIHRoZSBoYXJkd2FyZSwgZm9yICJmYWJzIiBhbmQgImZuZWciIHcvIGEgbG9uZyBzb3VyY2UgZm9ybWF0LCBwdXRzIHRoZQojIGxvbmd3b3JkIGludGVnZXIgZGlyZWN0bHkgaW50byB0aGUgdXBwZXIgbG9uZ3dvcmQgb2YgdGhlIG1hbnRpc3NhIGFsb25nCiMgdy8gYW4gZXhwb25lbnQgdmFsdWUgb2YgMHg0MDFlLiB3ZSBjb252ZXJ0IHRoaXMgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGhlcmUuCgliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMAkJIyBmZXRjaCBpbnN0ciBzaXplCglibmUuYgkJZmluZXhfY29udAkJIyBpbnN0ciBzaXplIGlzIG5vdCBsb25nCgljbXBpLncJCUZQX1NSQ19FWCglYTYpLCYweDQwMWUJIyBpcyBleHBvbmVudCAweDQwMWU/CglibmUuYgkJZmluZXhfY29udAkJIyBubwoJZm1vdi5sCQkmMHgwLCVmcGNyCglmbW92LmwJCUZQX1NSQ19ISSglYTYpLCVmcDAJIyBsb2FkIGludGVnZXIgc3JjCglmbW92LngJCSVmcDAsRlBfU1JDKCVhNikJIyBzdG9yZSBpbnRlZ2VyIGFzIGV4dGVuZGVkIHByZWNpc2lvbgoJbW92LncJCSYweGUwMDEsMHgyK0ZQX1NSQyglYTYpCgpmaW5leF9jb250OgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAoJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKCiMgSGVyZSwgd2UgemVybyB0aGUgY2NvZGUgYW5kIGV4Y2VwdGlvbiBieXRlIGZpZWxkIHNpbmNlIHdlJ3JlIGdvaW5nIHRvCiMgZW11bGF0ZSB0aGUgd2hvbGUgaW5zdHJ1Y3Rpb24uIE5vdGljZSwgdGhvdWdoLCB0aGF0IHdlIGRvbid0IGtpbGwgdGhlCiMgSU5FWDEgYml0LiBUaGlzIGlzIGJlY2F1c2UgYSBwYWNrZWQgb3AgaGFzIGxvbmcgc2luY2UgYmVlbiBjb252ZXJ0ZWQKIyB0byBleHRlbmRlZCBiZWZvcmUgYXJyaXZpbmcgaGVyZS4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIHJldGFpbiB0aGUKIyBJTkVYMSBiaXQgZnJvbSB3aGVuIHRoZSBvcGVyYW5kIHdhcyBmaXJzdCBjb252ZXJ0ZWQuCglhbmRpLmwJCSYweDAwZmYwMWZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJYmZleHR1CQlFWENfRVhUV09SRCglYTYpeyYwOiY2fSwlZDEgIyBleHRyYWN0IHVwcGVyIDYgb2YgY21kcmVnCgljbXBpLmIJCSVkMSwmMHgxNwkJIyBpcyBvcCBhbiBmbW92ZWNyPwoJYmVxLncJCWZpbmV4X2Ztb3ZjcgkJIyB5ZXMKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBtYXliZSBOT1JNLERFTk9STQoKIyBiaXRzIGZvdXIgYW5kIGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlIHRoZSBtb25hZGljIGFuZCBkeWFkaWMKIyBvcGVyYXRpb25zIHRoYXQgY2FuIHBhc3MgdGhyb3VnaCBmcHNwX2luZXgoKS4gcmVtZW1iZXIgdGhhdCBmY21wIGFuZCBmdHN0CiMgd2lsbCBuZXZlciB0YWtlIHRoaXMgZXhjZXB0aW9uLCBidXQgZnNpbmNvcyB3aWxsLgoJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KCWJlcS5iCQlmaW5leF9leHRyYWN0CQkjIG1vbmFkaWMKCglidHN0CQkmMHg0LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGFuIGZzaW5jb3M/CglibmUuYgkJZmluZXhfZXh0cmFjdAkJIyB5ZXMKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKCglsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZpbmV4X29wMl9kb25lCQkjIG5vCglic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTwpmaW5leF9vcDJfZG9uZToKCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKCmZpbmV4X2V4dHJhY3Q6CgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCgoJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQoJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCglsZWEJCUZQX0RTVCglYTYpLCVhMQoKCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKCiMgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBlbXVsYXRlZC4gdGhlIHJlc3VsdCBpcyBpbiBmcDAuCmZpbmV4X3NhdmU6CgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCglic3IubAkJc3RvcmVfZnByZWcKCmZpbmV4X2V4aXQ6CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikKCgl1bmxrCQklYTYKCWJyYS5sCQlfcmVhbF9pbmV4CgpmaW5leF9mbW92Y3I6CgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYyxtb2RlCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLmwJCSYweDAwMDAwMDdmLCVkMQkJIyBwYXNzIHJvbSBvZmZzZXQKCWJzci5sCQlzbW92Y3IKCWJyYS5iCQlmaW5leF9zYXZlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gbWVtb3J5IG9uIGVuYWJsZWQKIyBpbmV4YWN0IGV4Y2VwdGlvbnMuIHdlIGRvIHRoaXMgaGVyZSBiZWZvcmUgcGFzc2luZyBjb250cm9sIHRvCiMgdGhlIHVzZXIgaW5leGFjdCBoYW5kbGVyLgojCiMgYnl0ZSwgd29yZCwgYW5kIGxvbmcgZGVzdGluYXRpb24gZm9ybWF0IG9wZXJhdGlvbnMgY2FuIHBhc3MKIyB0aHJvdWdoIGhlcmUuIHNvIGNhbiBkb3VibGUgYW5kIHNpbmdsZSBwcmVjaXNpb24uCiMgYWx0aG91Z2ggcGFja2VkIG9wY2xhc3MgdGhyZWUgb3BlcmF0aW9ucyBjYW4gdGFrZSBpbmV4YWN0CiMgZXhjZXB0aW9ucywgdGhleSB3b24ndCBwYXNzIHRocm91Z2ggaGVyZSBzaW5jZSB0aGV5IGFyZSBjYXVnaHQKIyBmaXJzdCBieSB0aGUgdW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgZXhjZXB0aW9uIGhhbmRsZXIuIHRoYXQgaGFuZGxlcgojIHNlbmRzIHRoZW0gZGlyZWN0bHkgdG8gX3JlYWxfaW5leCgpIGlmIG5lY2Vzc2FyeS4KIwpmaW5leF9vdXQ6CgoJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQkJIyBzcmMgaXMgYSBOT1JNCgoJY2xyLmwJCSVkMAoJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMsbW9kZQoKCWFuZGkubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCgoJYnNyLmwJCWZvdXQJCQkjIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCWJyYS5iCQlmaW5leF9leGl0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF9keigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBEWiBleGNlcHRpb24uCQkjCiMJCQkJCQkJCQkjCiMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZwkjCiMJdGhlIEZQIERaIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZCBmcm9tIG1lbW9yeQkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBmc2F2ZSBvcGVyYW5kCQkJCSMKIwlfcmVhbF9keigpIC0gImNhbGxvdXQiIGV4aXQgcG9pbnQgZnJvbSBGUCBEWiBoYW5kbGVyCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIERaIGV4Y2VwdGlvbiBzdGFjay4JCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQuCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBEWiBleGNlcHRpb24gc3RhY2suCQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNvdXJjZSBvcGVyYW5kLgkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIERaIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbCBpcyB0bwkjCiMgZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9keigpLiBCdXQsIG9uIHRoZSAwNjAsIHdoZW4gdGhlCSMKIyBleGNlcHRpb24gaXMgdGFrZW4sIHRoZSBpbnB1dCBvcGVyYW5kIGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSBtYXkJIwojIGJlIGluY29ycmVjdCBmb3Igc29tZSBjYXNlcyBhbmQgbmVlZCB0byBiZSBhZGp1c3RlZC4gU28sIHRoaXMgcGFja2FnZQkjCiMgYWRqdXN0cyB0aGUgb3BlcmFuZCB1c2luZyBmaXhfc2tld2VkX29wcygpIGFuZCB0aGVuIGJyYW5jaGVzIHRvCSMKIyBfcmVhbF9keigpLgkJCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfZnBzcF9kegpfZnBzcF9kejoKCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCiMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCiMgaGVyZSwgd2Ugc2ltcGx5IHNlZSBpZiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbmVlZHMgdG8gYmUgInVuc2tld2VkIi4KIyB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGZvciBvcGNsYXNzIHR3byBvcGVyYXRpb25zIHdpdGggYSBzb3VyY2UgemVybwojIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4KCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCgpmZHpfZXhpdDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQoKCXVubGsJCSVhNgoJYnJhLmwJCV9yZWFsX2R6CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF9mbGluZSgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciAiTGluZSBGIGVtdWxhdG9yIgkjCiMJCSAgICAgICBleGNlcHRpb24gd2hlbiB0aGUgInJlZHVjZWQiIHZlcnNpb24gb2YgdGhlCSMKIwkJICAgICAgIEZQU1AgaXMgaW1wbGVtZW50ZWQgdGhhdCBkb2VzIG5vdCBlbXVsYXRlCSMKIwkJICAgICAgIEZQIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb25zLgkJCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIGEJIwojCSJMaW5lIEYgRW11bGF0b3IiIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtIGludGVncmF0aW5nCSMKIwl0aGUgcmVkdWNlZCB2ZXJzaW9uIG9mIDA2MEZQU1AuCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfcmVhbF9mcHVfZGlzYWJsZWQoKSAtIEhhbmRsZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb25zCQkjCiMJX3JlYWxfZmxpbmUoKSAtIEhhbmRsZSBhbGwgb3RoZXIgY2FzZXMgKHRyZWF0ZWQgZXF1YWxseSkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uCSMKIwkgIHN0YWNrIGZyYW1lLgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkLgkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlXaGVuIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uIG9jY3VycyBpbiBhIHN5c3RlbSB3aGVyZQkjCiMgIkZQVSBVbmltcGxlbWVudGVkIiBpbnN0cnVjdGlvbnMgd2lsbCBub3QgYmUgZW11bGF0ZWQsIHRoZSBleGNlcHRpb24JIwojIGNhbiBvY2N1ciBiZWNhdXNlIHRoZW4gRlBVIGlzIGRpc2FibGVkIG9yIHRoZSBpbnN0cnVjdGlvbiBpcyB0byBiZQkjCiMgY2xhc3NpZmVkIGFzICJMaW5lIEYiLiBUaGlzIG1vZHVsZSBkZXRlcm1pbmVzIHdoaWNoIGNhc2UgZXhpc3RzIGFuZAkjCiMgY2FsbHMgdGhlIGFwcHJvcHJpYXRlICJjYWxsb3V0Ii4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Zwc3BfZmxpbmUKX2Zwc3BfZmxpbmU6CgojIGNoZWNrIHRvIHNlZSBpZiB0aGUgRlBVIGlzIGRpc2FibGVkLiBpZiBzbywganVtcCB0byB0aGUgT1MgZW50cnkKIyBwb2ludCBmb3IgdGhhdCBjb25kaXRpb24uCgljbXBpLncJCTB4Niglc3ApLCYweDQwMmMKCWJlcS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKCglicmEubAkJX3JlYWxfZmxpbmUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9kY2FsY19lYSgpOiBjYWxjIGNvcnJlY3QgPGVhPiBmcm9tIDxlYT4gc3RhY2tlZCBvbiBleGNlcHRpb24JIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJaW5jX2FyZWcoKSAtIGluY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyCQkJIwojCWRlY19hcmVnKCkgLSBkZWNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlcgkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFkanVzdCA8ZWE+IGJ5CQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojICJEdW1teSIgQ0FMQ3VsYXRlIEVmZmVjdGl2ZSBBZGRyZXNzOgkJCQkJIwojCVRoZSBzdGFja2VkIDxlYT4gZm9yIEZQIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb25zIGFuZCBvcGNsYXNzCSMKIwl0d28gcGFja2VkIGluc3RydWN0aW9ucyBpcyBjb3JyZWN0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZi4uLgkjCiMJCQkJCQkJCQkjCiMJMSkgLShBbikgICA6IFRoZSByZWdpc3RlciBpcyBub3QgdXBkYXRlZCByZWdhcmRsZXNzIG9mIHNpemUuCSMKIwkJICAgICBBbHNvLCBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCBwYWNrZWQsIHRoZQkjCiMJCSAgICAgc3RhY2tlZCA8ZWE+IHZhbHVlIGlzIDggYnl0ZXMgdG9vIGJpZwkJIwojCTIpIChBbikrICAgOiBUaGUgcmVnaXN0ZXIgaXMgbm90IHVwZGF0ZWQuCQkJIwojCTMpICM8ZGF0YT4gOiBUaGUgdXBwZXIgbG9uZ3dvcmQgb2YgdGhlIGltbWVkaWF0ZSBvcGVyYW5kIGlzCSMKIwkJICAgICBzdGFja2VkIGIsdyxsIGFuZCBzIHNpemVzIGFyZSBjb21wbGV0ZWx5IHN0YWNrZWQuCSMKIwkJICAgICBkLHgsIGFuZCBwIGFyZSBub3QuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2RjYWxjX2VhCl9kY2FsY19lYToKCW1vdi5sCQklZDAsICVhMAkJIyBtb3ZlICMgYnl0ZXMgdG8gJWEwCgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCAlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAoJbW92LmwJCSVkMCwgJWQxCQkjIG1ha2UgYSBjb3B5CgoJYW5kaS53CQkmMHgzOCwgJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAoJYW5kaS5sCQkmMHg3LCAlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCgoJY21waS5iCQklZDAsJjB4MTgJCSMgaXMgbW9kZSAoQW4pKyA/CgliZXEuYgkJZGNlYV9waQkJCSMgeWVzCgoJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgbW9kZSAtKEFuKSA/CgliZXEuYgkJZGNlYV9wZAkJCSMgeWVzCgoJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG1vZGUscmVnCgljbXBpLmIJCSVkMCwmMHgzYwkJIyBpcyBtb2RlICM8ZGF0YT4/CgoJYmVxLmIJCWRjZWFfaW1tCQkjIHllcwoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcmV0dXJuIDxlYT4KCXJ0cwoKIyBuZWVkIHRvIHNldCBpbW1lZGlhdGUgZGF0YSBmbGFnIGhlcmUgc2luY2Ugd2UnbGwgbmVlZCB0byBkbwojIGFuIGltZW1fcmVhZCB0byBmZXRjaCB0aGlzIGxhdGVyLgpkY2VhX2ltbToKCW1vdi5iCQkmaW1tZWRfZmxnLFNQQ09ORF9GTEcoJWE2KQoJbGVhCQkoW1VTRVJfRlBJQVIsJWE2XSwweDQpLCVhMCAjIG5vOyByZXR1cm4gPGVhPgoJcnRzCgojIGhlcmUsIHRoZSA8ZWE+IGlzIHN0YWNrZWQgY29ycmVjdGx5LiBob3dldmVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUKIyBhZGRyZXNzIHJlZ2lzdGVyLi4uCmRjZWFfcGk6Cgltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyBhbXQgdG8gaW5jIGJ5Cglic3IubAkJaW5jX2FyZWcJCSMgaW5jIGFkZHIgcmVnaXN0ZXIKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CglydHMKCiMgdGhlIDxlYT4gaXMgc3RhY2tlZCBjb3JyZWN0bHkgZm9yIGFsbCBidXQgZXh0ZW5kZWQgYW5kIHBhY2tlZCB3aGljaAojIHRoZSA8ZWE+cyBhcmUgOCBieXRlcyB0b28gbGFyZ2UuCiMgaXQgd291bGQgbWFrZSBubyBzZW5zZSB0byBoYXZlIGEgcHJlLWRlY3JlbWVudCB0byBhNyBpbiBzdXBlcnZpc29yCiMgbW9kZSBzbyB3ZSBkb24ndCBldmVuIHdvcnJ5IGFib3V0IHRoaXMgdHJpY2t5IGNhc2UgaGVyZSA6ICkKZGNlYV9wZDoKCW1vdi5sCQklYTAsJWQwCQkJIyBwYXNzIGFtdCB0byBkZWMgYnkKCWJzci5sCQlkZWNfYXJlZwkJIyBkZWMgYWRkciByZWdpc3RlcgoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKCgljbXBpLmIJCSVkMCwmMHhjCQkjIGlzIG9wc2l6ZSBleHQgb3IgcGFja2VkPwoJYmVxLmIJCWRjZWFfcGQyCQkjIHllcwoJcnRzCmRjZWFfcGQyOgoJc3ViLmwJCSYweDgsJWEwCQkjIGNvcnJlY3QgPGVhPgoJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBwdXQgY29ycmVjdCA8ZWE+IG9uIHN0YWNrCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9jYWxjX2VhX2ZvdXQoKTogY2FsY3VsYXRlIGNvcnJlY3Qgc3RhY2tlZCA8ZWE+IGZvciBleHRlbmRlZAkjCiMJCQkgYW5kIHBhY2tlZCBkYXRhIG9wY2xhc3MgMyBvcGVyYXRpb25zLgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSByZXR1cm4gY29ycmVjdCBlZmZlY3RpdmUgYWRkcmVzcwkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGb3Igb3BjbGFzcyAzIGV4dGVuZGVkIGFuZCBwYWNrZWQgZGF0YSBvcGVyYXRpb25zLCB0aGUgPGVhPgkjCiMgc3RhY2tlZCBmb3IgdGhlIGV4Y2VwdGlvbiBpcyBpbmNvcnJlY3QgZm9yIC0oYW4pIGFuZCAoYW4pKyBhZGRyZXNzaW5nCSMKIyBtb2Rlcy4gQWxzbywgd2hpbGUgd2UncmUgYXQgaXQsIHRoZSBpbmRleCByZWdpc3RlciBpdHNlbGYgbXVzdCBnZXQJIwojIHVwZGF0ZWQuCQkJCQkJCQkjCiMJU28sIGZvciAtKGFuKSwgd2UgbXVzdCBzdWJ0cmFjdCA4IG9mZiBvZiB0aGUgc3RhY2tlZCA8ZWE+IHZhbHVlCSMKIyBhbmQgcmV0dXJuIHRoYXQgdmFsdWUgYXMgdGhlIGNvcnJlY3QgPGVhPiBhbmQgc3RvcmUgdGhhdCB2YWx1ZSBpbiBBbi4JIwojIEZvciAoYW4pKywgdGhlIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0IGJ1dCB3ZSBtdXN0IGFkanVzdCBBbiBieSArMTIuCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBUaGlzIGNhbGNfZWEgaXMgY3VycmVudGx5IHVzZWQgdG8gcmV0cmlldmUgdGhlIGNvcnJlY3QgPGVhPgojIGZvciBmbW92ZSBvdXRzIG9mIHR5cGUgZXh0ZW5kZWQgYW5kIHBhY2tlZC4KCWdsb2JhbAkJX2NhbGNfZWFfZm91dApfY2FsY19lYV9mb3V0OgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMAkjIGZldGNoIG9wY29kZSB3b3JkCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKCglhbmRpLncJCSYweDM4LCVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKCWFuZGkubAkJJjB4NywlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCgoJY21waS5iCQklZDAsJjB4MTgJCSMgaXMgbW9kZSAoQW4pKyA/CgliZXEuYgkJY2VhZl9waQkJCSMgeWVzCgoJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgbW9kZSAtKEFuKSA/CgliZXEudwkJY2VhZl9wZAkJCSMgeWVzCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJcnRzCgojIChBbikrIDogZXh0ZW5kZWQgYW5kIHBhY2tlZCBmbW92ZSBvdXQKIwk6IHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CiMJOiAiQW4iIG5vdCB1cGRhdGVkCmNlYWZfcGk6Cgltb3YudwkJKHRibF9jZWFmX3BpLmIsJXBjLCVkMS53KjIpLCVkMQoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAoJam1wCQkodGJsX2NlYWZfcGkuYiwlcGMsJWQxLncqMSkKCglzd2JlZwkJJjB4OAp0YmxfY2VhZl9waToKCXNob3J0CQljZWFmX3BpMCAtIHRibF9jZWFmX3BpCglzaG9ydAkJY2VhZl9waTEgLSB0YmxfY2VhZl9waQoJc2hvcnQJCWNlYWZfcGkyIC0gdGJsX2NlYWZfcGkKCXNob3J0CQljZWFmX3BpMyAtIHRibF9jZWFmX3BpCglzaG9ydAkJY2VhZl9waTQgLSB0YmxfY2VhZl9waQoJc2hvcnQJCWNlYWZfcGk1IC0gdGJsX2NlYWZfcGkKCXNob3J0CQljZWFmX3BpNiAtIHRibF9jZWFmX3BpCglzaG9ydAkJY2VhZl9waTcgLSB0YmxfY2VhZl9waQoKY2VhZl9waTA6CglhZGRpLmwJCSYweGMsRVhDX0RSRUdTKzB4OCglYTYpCglydHMKY2VhZl9waTE6CglhZGRpLmwJCSYweGMsRVhDX0RSRUdTKzB4YyglYTYpCglydHMKY2VhZl9waTI6CglhZGQubAkJJjB4YywlYTIKCXJ0cwpjZWFmX3BpMzoKCWFkZC5sCQkmMHhjLCVhMwoJcnRzCmNlYWZfcGk0OgoJYWRkLmwJCSYweGMsJWE0CglydHMKY2VhZl9waTU6CglhZGQubAkJJjB4YywlYTUKCXJ0cwpjZWFmX3BpNjoKCWFkZGkubAkJJjB4YyxFWENfQTYoJWE2KQoJcnRzCmNlYWZfcGk3OgoJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikKCWFkZGkubAkJJjB4YyxFWENfQTcoJWE2KQoJcnRzCgojIC0oQW4pIDogZXh0ZW5kZWQgYW5kIHBhY2tlZCBmbW92ZSBvdXQKIwk6IHN0YWNrZWQgPGVhPiA9IGFjdHVhbCA8ZWE+ICsgOAojCTogIkFuIiBub3QgdXBkYXRlZApjZWFmX3BkOgoJbW92LncJCSh0YmxfY2VhZl9wZC5iLCVwYywlZDEudyoyKSwlZDEKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAKCXN1Yi5sCQkmMHg4LCVhMAoJc3ViLmwJCSYweDgsRVhDX0VBKCVhNikKCWptcAkJKHRibF9jZWFmX3BkLmIsJXBjLCVkMS53KjEpCgoJc3diZWcJCSYweDgKdGJsX2NlYWZfcGQ6CglzaG9ydAkJY2VhZl9wZDAgLSB0YmxfY2VhZl9wZAoJc2hvcnQJCWNlYWZfcGQxIC0gdGJsX2NlYWZfcGQKCXNob3J0CQljZWFmX3BkMiAtIHRibF9jZWFmX3BkCglzaG9ydAkJY2VhZl9wZDMgLSB0YmxfY2VhZl9wZAoJc2hvcnQJCWNlYWZfcGQ0IC0gdGJsX2NlYWZfcGQKCXNob3J0CQljZWFmX3BkNSAtIHRibF9jZWFmX3BkCglzaG9ydAkJY2VhZl9wZDYgLSB0YmxfY2VhZl9wZAoJc2hvcnQJCWNlYWZfcGQ3IC0gdGJsX2NlYWZfcGQKCmNlYWZfcGQwOgoJbW92LmwJCSVhMCxFWENfRFJFR1MrMHg4KCVhNikKCXJ0cwpjZWFmX3BkMToKCW1vdi5sCQklYTAsRVhDX0RSRUdTKzB4YyglYTYpCglydHMKY2VhZl9wZDI6Cgltb3YubAkJJWEwLCVhMgoJcnRzCmNlYWZfcGQzOgoJbW92LmwJCSVhMCwlYTMKCXJ0cwpjZWFmX3BkNDoKCW1vdi5sCQklYTAsJWE0CglydHMKY2VhZl9wZDU6Cgltb3YubAkJJWEwLCVhNQoJcnRzCmNlYWZfcGQ2OgoJbW92LmwJCSVhMCxFWENfQTYoJWE2KQoJcnRzCmNlYWZfcGQ3OgoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQoJbW92LmIJCSZtZGE3X2ZsZyxTUENPTkRfRkxHKCVhNikKCXJ0cwoKIwojIFRoaXMgdGFibGUgaG9sZHMgdGhlIG9mZnNldHMgb2YgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyBmb3IgZWFjaCBpbmRpdmlkdWFsCiMgbWF0aCBvcGVyYXRpb24gcmVsYXRpdmUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhpcyB0YWJsZS4gSW5jbHVkZWQgYXJlCiMgcm91dGluZXMgbGlrZSBmYWRkL2ZtdWwvZmFicy4gVGhlIHRyYW5zY2VuZGVudGFscyBBUkUgTk9ULiBUaGlzIGlzIGJlY2F1c2UKIyB0aGlzIHRhYmxlIGlzIGZvciB0aGUgdmVyc2lvbiBpZiB0aGUgMDYwRlBTUCB3aXRob3V0IHRyYW5zY2VuZGVudGFscy4KIyBUaGUgbG9jYXRpb24gd2l0aGluIHRoZSB0YWJsZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBleHRlbnNpb24gYml0cyBvZiB0aGUKIyBvcGVyYXRpb24gbG9uZ3dvcmQuCiMKCglzd2JlZwkJJjEwOQp0YmxfdW5zdXBwOgoJbG9uZwkJZmluCQktIHRibF91bnN1cHAJIyAwMDogZm1vdmUKCWxvbmcJCWZpbnQJCS0gdGJsX3Vuc3VwcAkjIDAxOiBmaW50Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDAyOiBmc2luaAoJbG9uZwkJZmludHJ6CQktIHRibF91bnN1cHAJIyAwMzogZmludHJ6Cglsb25nCQlmc3FydAkJLSB0YmxfdW5zdXBwCSMgMDQ6IGZzcXJ0Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAwNjogZmxvZ25wMQoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMDg6IGZldG94bTEKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMDk6IGZ0YW5oCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDBhOiBmYXRhbgoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGM6IGZhc2luCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDBkOiBmYXRhbmgKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGU6IGZzaW4KCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGY6IGZ0YW4KCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMTA6IGZldG94Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDExOiBmdHdvdG94Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDEyOiBmdGVudG94Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxNDogZmxvZ24KCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMTU6IGZsb2cxMAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxNjogZmxvZzIKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmYWJzCQktIHRibF91bnN1cHAJIyAxODogZmFicwoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxOTogZmNvc2gKCWxvbmcJCWZuZWcJCS0gdGJsX3Vuc3VwcAkjIDFhOiBmbmVnCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxYzogZmFjb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMWQ6IGZjb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMWU6IGZnZXRleHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMWY6IGZnZXRtYW4KCWxvbmcJCWZkaXYJCS0gdGJsX3Vuc3VwcAkjIDIwOiBmZGl2Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDIxOiBmbW9kCglsb25nCQlmYWRkCQktIHRibF91bnN1cHAJIyAyMjogZmFkZAoJbG9uZwkJZm11bAkJLSB0YmxfdW5zdXBwCSMgMjM6IGZtdWwKCWxvbmcJCWZzZ2xkaXYJCS0gdGJsX3Vuc3VwcAkjIDI0OiBmc2dsZGl2Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDI1OiBmcmVtCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDI2OiBmc2NhbGUKCWxvbmcJCWZzZ2xtdWwJCS0gdGJsX3Vuc3VwcAkjIDI3OiBmc2dsbXVsCglsb25nCQlmc3ViCQktIHRibF91bnN1cHAJIyAyODogZnN1YgoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzA6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzE6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzI6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzM6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzQ6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzU6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzY6IGZzaW5jb3MKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzc6IGZzaW5jb3MKCWxvbmcJCWZjbXAJCS0gdGJsX3Vuc3VwcAkjIDM4OiBmY21wCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZnRzdAkJLSB0YmxfdW5zdXBwCSMgM2E6IGZ0c3QKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZnNpbgkJLSB0YmxfdW5zdXBwCSMgNDA6IGZzbW92ZQoJbG9uZwkJZnNzcXJ0CQktIHRibF91bnN1cHAJIyA0MTogZnNzcXJ0Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZkaW4JCS0gdGJsX3Vuc3VwcAkjIDQ0OiBmZG1vdmUKCWxvbmcJCWZkc3FydAkJLSB0YmxfdW5zdXBwCSMgNDU6IGZkc3FydAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZnNhYnMJCS0gdGJsX3Vuc3VwcAkjIDU4OiBmc2FicwoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZzbmVnCQktIHRibF91bnN1cHAJIyA1YTogZnNuZWcKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmZGFicwkJLSB0YmxfdW5zdXBwCSMgNWM6IGZkYWJzCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmRuZWcJCS0gdGJsX3Vuc3VwcAkjIDVlOiBmZG5lZwoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZzZGl2CQktIHRibF91bnN1cHAJIyA2MDogZnNkaXYKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmc2FkZAkJLSB0YmxfdW5zdXBwCSMgNjI6IGZzYWRkCglsb25nCQlmc211bAkJLSB0YmxfdW5zdXBwCSMgNjM6IGZzbXVsCglsb25nCQlmZGRpdgkJLSB0YmxfdW5zdXBwCSMgNjQ6IGZkZGl2Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmRhZGQJCS0gdGJsX3Vuc3VwcAkjIDY2OiBmZGFkZAoJbG9uZwkJZmRtdWwJCS0gdGJsX3Vuc3VwcAkjIDY3OiBmZG11bAoJbG9uZwkJZnNzdWIJCS0gdGJsX3Vuc3VwcAkjIDY4OiBmc3N1YgoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmRzdWIJCS0gdGJsX3Vuc3VwcAkjIDZjOiBmZHN1YgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFkZCB0aGlzIGhlcmUgc28gbm9uLWZwIG1vZHVsZXMgY2FuIGNvbXBpbGUuCiMgKHNtb3ZjciBpcyBjYWxsZWQgZnJvbSBmcHNwX2luZXguKQoJZ2xvYmFsCQlzbW92Y3IKc21vdmNyOgoJYnJhLmIJCXNtb3ZjcgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZm1vdm1fZHluYW1pYygpOiBlbXVsYXRlICJmbW92bSIgZHluYW1pYyBpbnN0cnVjdGlvbgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZmV0Y2hfZHJlZygpIC0gZmV0Y2ggZGF0YSByZWdpc3RlcgkJCQkjCiMJe2ksZCx9bWVtX3JlYWQoKSAtIGZldGNoIGRhdGEgZnJvbSBtZW1vcnkJCQkjCiMJX21lbV93cml0ZSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkJCQkJIwojCWllYV9pYWNjKCkgLSBpbnN0cnVjdGlvbiBtZW1vcnkgYWNjZXNzIGVycm9yIG9jY3VycmVkCQkjCiMJaWVhX2RhY2MoKSAtIGRhdGEgbWVtb3J5IGFjY2VzcyBlcnJvciBvY2N1cnJlZAkJCSMKIwlyZXN0b3JlKCkgLSByZXN0b3JlIEFuIGluZGV4IHJlZ3MgaWYgYWNjZXNzIGVycm9yIG9jY3VycmVkCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUlmIGluc3RyIGlzICJmbW92bSBEbiwtKEE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUsCQkjCiMJCWQwID0gc2l6ZSBvZiBkdW1wCQkJCQkjCiMJCWQxID0gRG4JCQkJCQkJIwojCUVsc2UgaWYgaW5zdHJ1Y3Rpb24gYWNjZXNzIGVycm9yLAkJCQkjCiMJCWQwID0gRlNMVwkJCQkJCSMKIwlFbHNlIGlmIGRhdGEgYWNjZXNzIGVycm9yLAkJCQkJIwojCQlkMCA9IEZTTFcJCQkJCQkjCiMJCWEwID0gYWRkcmVzcyBvZiBmYXVsdAkJCQkJIwojCUVsc2UJCQkJCQkJCSMKIwkJbm9uZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVGhlIGVmZmVjdGl2ZSBhZGRyZXNzIG11c3QgYmUgY2FsY3VsYXRlZCBzaW5jZSB0aGlzIGlzIGVudGVyZWQJIwojIGZyb20gYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiIGV4Y2VwdGlvbiBoYW5kbGVyLiBTbywgd2UJIwojIGhhdmUgb3VyIG93biBmY2FsY19lYSgpIHJvdXRpbmUgaGVyZS4gSWYgYW4gYWNjZXNzIGVycm9yIGlzIGZsYWdnZWQJIwojIGJ5IGEgX3tpLGQsfW1lbV9yZWFkKCkgY2FsbCwgd2UgbXVzdCBleGl0IHRocm91Z2ggdGhlIHNwZWNpYWwJCSMKIyBoYW5kbGVyLgkJCQkJCQkJIwojCVRoZSBkYXRhIHJlZ2lzdGVyIGlzIGRldGVybWluZWQgYW5kIGl0cyB2YWx1ZSBsb2FkZWQgdG8gZ2V0IHRoZQkjCiMgc3RyaW5nIG9mIEZQIHJlZ2lzdGVycyBhZmZlY3RlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIGFzIGFuIGluZGV4IGludG8JIwojIGEgbG9va3VwIHRhYmxlIHN1Y2ggdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMJCSMKIyBpbnZvbHZlZC4JCQkJCQkJCSMKIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggPGVhPixEbiIsIGEgX21lbV9yZWFkKCkgaXMgdXNlZAkjCiMgdG8gcmVhZCBpbiBhbGwgRlAgdmFsdWVzLiBBZ2FpbiwgX21lbV9yZWFkKCkgbWF5IGZhaWwgYW5kIHJlcXVpcmUgYQkjCiMgc3BlY2lhbCBleGl0LgkJCQkJCQkJIwojCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyAiZm1vdm0ueCBETiw8ZWE+IiwgYSBfbWVtX3dyaXRlKCkgaXMgdXNlZAkjCiMgdG8gd3JpdGUgYWxsIEZQIHZhbHVlcy4gX21lbV93cml0ZSgpIG1heSBhbHNvIGZhaWwuCQkJIwojCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyAiZm1vdm0ueCBETiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUsCSMKIyB0aGVuIHdlIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgZHVtcCBhbmQgdGhlIHN0cmluZyB0byB0aGUgY2FsbGVyCSMKIyBzbyB0aGF0IHRoZSBtb3ZlIGNhbiBvY2N1ciBvdXRzaWRlIG9mIHRoaXMgcm91dGluZS4gVGhpcyBzcGVjaWFsCSMKIyBjYXNlIGlzIHJlcXVpcmVkIHNvIHRoYXQgbW92ZXMgdG8gdGhlIHN5c3RlbSBzdGFjayBhcmUgaGFuZGxlZAkjCiMgY29ycmVjdGx5LgkJCQkJCQkJIwojCQkJCQkJCQkJIwojIERZTkFNSUM6CQkJCQkJCQkjCiMJZm1vdm0ueAlkbiwgPGVhPgkJCQkJCSMKIwlmbW92bS54CTxlYT4sIGRuCQkJCQkJIwojCQkJCQkJCQkJIwojCSAgICAgIDxXT1JEIDE+CQkgICAgICA8V09SRDI+CQkJCSMKIwkxMTExIDAwMTAgMDAgfDxlYT58CTExQCYgMTAwMCAwJCQkIDAwMDAJCQkjCiMJCQkJCQkJCQkjCiMJJiA9ICgwKTogcHJlZGVjcmVtZW50IGFkZHJlc3NpbmcgbW9kZQkJCQkjCiMJICAgICgxKTogcG9zdGluY3JlbWVudCBvciBjb250cm9sIGFkZHJlc3NpbmcgbW9kZQkJIwojCUAgPSAoMCk6IG1vdmUgbGlzdGVkIHJlZ3MgZnJvbSBtZW1vcnkgdG8gdGhlIEZQVQkJIwojCSAgICAoMSk6IG1vdmUgbGlzdGVkIHJlZ3MgZnJvbSB0aGUgRlBVIHRvIG1lbW9yeQkJIwojCSQkJCAgICA6IGluZGV4IG9mIGRhdGEgcmVnaXN0ZXIgaG9sZGluZyByZWcgc2VsZWN0IG1hc2sJCSMKIwkJCQkJCQkJCSMKIyBOT1RFUzoJCQkJCQkJCSMKIwlJZiB0aGUgZGF0YSByZWdpc3RlciBob2xkcyBhIHplcm8sIHRoZW4gdGhlCQkJIwojCWluc3RydWN0aW9uIGlzIGEgbm9wLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZm1vdm1fZHluYW1pYwpmbW92bV9keW5hbWljOgoKIyBleHRyYWN0IHRoZSBkYXRhIHJlZ2lzdGVyIGluIHdoaWNoIHRoZSBiaXQgc3RyaW5nIHJlc2lkZXMuLi4KCW1vdi5iCQkxK0VYQ19FWFRXT1JEKCVhNiksJWQxCSMgZmV0Y2ggZXh0d29yZAoJYW5kaS53CQkmMHg3MCwlZDEJCSMgZXh0cmFjdCByZWcgYml0cwoJbHNyLmIJCSYweDQsJWQxCQkjIHNoaWZ0IGludG8gbG8gYml0cwoKIyBmZXRjaCB0aGUgYml0IHN0cmluZyBpbnRvIGQwLi4uCglic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCByZWcgc3RyaW5nCgoJYW5kaS5sCQkmMHgwMDAwMDBmZiwlZDAJCSMga2VlcCBvbmx5IGxvIGJ5dGUKCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHN0cmcKCW1vdi5iCQkodGJsX2Ztb3ZtX3NpemUudywlcGMsJWQwKSwlZDAKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2l6ZQoJYnNyLmwJCWZtb3ZtX2NhbGNfZWEJCSMgY2FsY3VsYXRlIDxlYT4KCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgc2l6ZQoJbW92LmwJCSglc3ApKywlZDEJCSMgcmVzdG9yZSBzdHJnCgojIGlmIHRoZSBiaXQgc3RyaW5nIGlzIGEgemVybywgdGhlbiB0aGUgb3BlcmF0aW9uIGlzIGEgbm8tb3AKIyBidXQsIG1ha2Ugc3VyZSB0aGF0IHdlJ3ZlIGNhbGN1bGF0ZWQgZWEgYW5kIGFkdmFuY2VkIHRoZSBvcHdvcmQgcG9pbnRlcgoJYmVxLncJCWZtb3ZtX2RhdGFfZG9uZQoKIyBzZXBhcmF0ZSBtb3ZlIGlucyBmcm9tIG1vdmUgb3V0cy4uLgoJYnRzdAkJJjB4NSxFWENfRVhUV09SRCglYTYpCSMgaXMgaXQgYSBtb3ZlIGluIG9yIG91dD8KCWJlcS53CQlmbW92bV9kYXRhX2luCQkjIGl0J3MgYSBtb3ZlIG91dAoKIyMjIyMjIyMjIyMjIwojIE1PVkUgT1VUOiAjCiMjIyMjIyMjIyMjIyMKZm1vdm1fZGF0YV9vdXQ6CglidHN0CQkmMHg0LEVYQ19FWFRXT1JEKCVhNikJIyBjb250cm9sIG9yIHByZWRlY3JlbWVudD8KCWJuZS53CQlmbW92bV9vdXRfY3RybAkJIyBjb250cm9sCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZtb3ZtX291dF9wcmVkZWM6CiMgZm9yIHByZWRlY3JlbWVudCBtb2RlLCB0aGUgYml0IHN0cmluZyBpcyB0aGUgb3Bwb3NpdGUgb2YgYm90aCBjb250cm9sCiMgb3BlcmF0aW9ucyBhbmQgcG9zdGluY3JlbWVudCBtb2RlLiAoYml0NyA9IEZQNyAuLi4gYml0MCA9IEZQMCkKIyBoZXJlLCB3ZSBjb252ZXJ0IGl0IHRvIGJlIGp1c3QgbGlrZSB0aGUgb3RoZXJzLi4uCgltb3YuYgkJKHRibF9mbW92bV9jb252ZXJ0LncsJXBjLCVkMS53KjEpLCVkMQoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KCWJlcS5iCQlmbW92bV9vdXRfY3RybAkJIyB1c2VyCgpmbW92bV9vdXRfcHJlZGVjX3M6CgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyBpcyA8ZWE+IG1vZGUgLShhNyk/CglibmUuYgkJZm1vdm1fb3V0X2N0cmwKCiMgdGhlIG9wZXJhdGlvbiB3YXMgdW5mb3J0dW5hdGVseSBhbjogZm1vdm0ueCBkbiwtKHNwKQojIGNhbGxlZCBmcm9tIHN1cGVydmlzb3IgbW9kZS4KIyB3ZSdyZSBhbHNvIHBhc3NpbmcgInNpemUiIGFuZCAic3RyZyIgYmFjayB0byB0aGUgY2FsbGluZyByb3V0aW5lCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZm1vdm1fb3V0X2N0cmw6Cgltb3YubAkJJWEwLCVhMQkJCSMgbW92ZSA8ZWE+IHRvIGExCgoJc3ViLmwJCSVkMCwlc3AJCQkjIHN1YnRyYWN0IHNpemUgb2YgZHVtcAoJbGVhCQkoJXNwKSwlYTAKCgl0c3QuYgkJJWQxCQkJIyBzaG91bGQgRlAwIGJlIG1vdmVkPwoJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwMQkjIG5vCgoJbW92LmwJCTB4MCtFWENfRlAwKCVhNiksKCVhMCkrCSMgeWVzCgltb3YubAkJMHg0K0VYQ19GUDAoJWE2KSwoJWEwKSsKCW1vdi5sCQkweDgrRVhDX0ZQMCglYTYpLCglYTApKwoKZm1vdm1fb3V0X2N0cmxfZnAxOgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDEgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnAyCSMgbm8KCgltb3YubAkJMHgwK0VYQ19GUDEoJWE2KSwoJWEwKSsJIyB5ZXMKCW1vdi5sCQkweDQrRVhDX0ZQMSglYTYpLCglYTApKwoJbW92LmwJCTB4OCtFWENfRlAxKCVhNiksKCVhMCkrCgpmbW92bV9vdXRfY3RybF9mcDI6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMiBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDMJIyBubwoKCWZtb3ZtLngJCSYweDIwLCglYTApCQkjIHllcwoJYWRkLmwJCSYweGMsJWEwCgpmbW92bV9vdXRfY3RybF9mcDM6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMyBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDQJIyBubwoKCWZtb3ZtLngJCSYweDEwLCglYTApCQkjIHllcwoJYWRkLmwJCSYweGMsJWEwCgpmbW92bV9vdXRfY3RybF9mcDQ6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNCBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDUJIyBubwoKCWZtb3ZtLngJCSYweDA4LCglYTApCQkjIHllcwoJYWRkLmwJCSYweGMsJWEwCgpmbW92bV9vdXRfY3RybF9mcDU6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNSBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDYJIyBubwoKCWZtb3ZtLngJCSYweDA0LCglYTApCQkjIHllcwoJYWRkLmwJCSYweGMsJWEwCgpmbW92bV9vdXRfY3RybF9mcDY6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNiBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDcJIyBubwoKCWZtb3ZtLngJCSYweDAyLCglYTApCQkjIHllcwoJYWRkLmwJCSYweGMsJWEwCgpmbW92bV9vdXRfY3RybF9mcDc6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNyBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9kb25lCSMgbm8KCglmbW92bS54CQkmMHgwMSwoJWEwKQkJIyB5ZXMKCWFkZC5sCQkmMHhjLCVhMAoKZm1vdm1fb3V0X2N0cmxfZG9uZToKCW1vdi5sCQklYTEsTF9TQ1IxKCVhNikKCglsZWEJCSglc3ApLCVhMAkJIyBwYXNzOiBzdXBlcnZpc29yIHNyYwoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzaXplCglic3IubAkJX2RtZW1fd3JpdGUJCSMgY29weSBkYXRhIHRvIHVzZXIgbWVtCgoJbW92LmwJCSglc3ApKywlZDAKCWFkZC5sCQklZDAsJXNwCQkJIyBjbGVhciBmcHJlZyBkYXRhIGZyb20gc3RhY2sKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGVycj8KCWJuZS53CQlmbW92bV9vdXRfZXJyCQkjIHllcwoKCXJ0cwoKIyMjIyMjIyMjIyMjCiMgTU9WRSBJTjogIwojIyMjIyMjIyMjIyMKZm1vdm1fZGF0YV9pbjoKCW1vdi5sCQklYTAsTF9TQ1IxKCVhNikKCglzdWIubAkJJWQwLCVzcAkJCSMgbWFrZSByb29tIGZvciBmcHJlZ3MKCWxlYQkJKCVzcCksJWExCgoJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBiaXQgc3RyaW5nIGZvciBsYXRlcgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSAjIG9mIGJ5dGVzCgoJYnNyLmwJCV9kbWVtX3JlYWQJCSMgY29weSBkYXRhIGZyb20gdXNlciBtZW0KCgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXRyaWV2ZSAjIG9mIGJ5dGVzCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPwoJYm5lLncJCWZtb3ZtX2luX2VycgkJIyB5ZXMKCgltb3YubAkJKCVzcCkrLCVkMQkJIyBsb2FkIGJpdCBzdHJpbmcKCglsZWEJCSglc3ApLCVhMAkJIyBhZGRyIG9mIHN0YWNrCgoJdHN0LmIJCSVkMQkJCSMgc2hvdWxkIEZQMCBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMQkjIG5vCgoJbW92LmwJCSglYTApKywweDArRVhDX0ZQMCglYTYpCSMgeWVzCgltb3YubAkJKCVhMCkrLDB4NCtFWENfRlAwKCVhNikKCW1vdi5sCQkoJWEwKSssMHg4K0VYQ19GUDAoJWE2KQoKZm1vdm1fZGF0YV9pbl9mcDE6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMSBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMgkjIG5vCgoJbW92LmwJCSglYTApKywweDArRVhDX0ZQMSglYTYpCSMgeWVzCgltb3YubAkJKCVhMCkrLDB4NCtFWENfRlAxKCVhNikKCW1vdi5sCQkoJWEwKSssMHg4K0VYQ19GUDEoJWE2KQoKZm1vdm1fZGF0YV9pbl9mcDI6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMiBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMwkjIG5vCgoJZm1vdm0ueAkJKCVhMCkrLCYweDIwCQkjIHllcwoKZm1vdm1fZGF0YV9pbl9mcDM6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMyBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNAkjIG5vCgoJZm1vdm0ueAkJKCVhMCkrLCYweDEwCQkjIHllcwoKZm1vdm1fZGF0YV9pbl9mcDQ6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNCBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNQkjIG5vCgoJZm1vdm0ueAkJKCVhMCkrLCYweDA4CQkjIHllcwoKZm1vdm1fZGF0YV9pbl9mcDU6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNSBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNgkjIG5vCgoJZm1vdm0ueAkJKCVhMCkrLCYweDA0CQkjIHllcwoKZm1vdm1fZGF0YV9pbl9mcDY6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNiBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNwkjIG5vCgoJZm1vdm0ueAkJKCVhMCkrLCYweDAyCQkjIHllcwoKZm1vdm1fZGF0YV9pbl9mcDc6Cglsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNyBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9kYXRhX2luX2RvbmUJIyBubwoKCWZtb3ZtLngJCSglYTApKywmMHgwMQkJIyB5ZXMKCmZtb3ZtX2RhdGFfaW5fZG9uZToKCWFkZC5sCQklZDAsJXNwCQkJIyByZW1vdmUgZnByZWdzIGZyb20gc3RhY2sKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZm1vdm1fZGF0YV9kb25lOgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0YWJsZSBpbmRleGVkIGJ5IHRoZSBvcGVyYXRpb24ncyBiaXQgc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG51bWJlcgojIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSBtb3ZlZC4KIwojIG51bWJlciBvZiBieXRlcyA9ICgjIG9mIDEncyBpbiBiaXQgc3RyaW5nKSAqIDEyKGJ5dGVzL2ZwcmVnKQojCnRibF9mbW92bV9zaXplOgoJYnl0ZQkweDAwLDB4MGMsMHgwYywweDE4LDB4MGMsMHgxOCwweDE4LDB4MjQKCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCglieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCglieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYwoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCglieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYwoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYwoJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAoJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKCWJ5dGUJMHgzYywweDQ4LDB4NDgsMHg1NCwweDQ4LDB4NTQsMHg1NCwweDYwCgojCiMgdGFibGUgdG8gY29udmVydCBhIHByZS1kZWNyZW1lbnQgYml0IHN0cmluZyBpbnRvIGEgcG9zdC1pbmNyZW1lbnQKIyBvciBjb250cm9sIGJpdCBzdHJpbmcuCiMgZXg6CTB4MDAJPT0+CTB4MDAKIwkweDAxCT09PgkweDgwCiMJMHgwMgk9PT4JMHg0MAojCQkuCiMJCS4KIwkweGZkCT09PgkweGJmCiMJMHhmZQk9PT4JMHg3ZgojCTB4ZmYJPT0+CTB4ZmYKIwp0YmxfZm1vdm1fY29udmVydDoKCWJ5dGUJMHgwMCwweDgwLDB4NDAsMHhjMCwweDIwLDB4YTAsMHg2MCwweGUwCglieXRlCTB4MTAsMHg5MCwweDUwLDB4ZDAsMHgzMCwweGIwLDB4NzAsMHhmMAoJYnl0ZQkweDA4LDB4ODgsMHg0OCwweGM4LDB4MjgsMHhhOCwweDY4LDB4ZTgKCWJ5dGUJMHgxOCwweDk4LDB4NTgsMHhkOCwweDM4LDB4YjgsMHg3OCwweGY4CglieXRlCTB4MDQsMHg4NCwweDQ0LDB4YzQsMHgyNCwweGE0LDB4NjQsMHhlNAoJYnl0ZQkweDE0LDB4OTQsMHg1NCwweGQ0LDB4MzQsMHhiNCwweDc0LDB4ZjQKCWJ5dGUJMHgwYywweDhjLDB4NGMsMHhjYywweDJjLDB4YWMsMHg2YywweGVjCglieXRlCTB4MWMsMHg5YywweDVjLDB4ZGMsMHgzYywweGJjLDB4N2MsMHhmYwoJYnl0ZQkweDAyLDB4ODIsMHg0MiwweGMyLDB4MjIsMHhhMiwweDYyLDB4ZTIKCWJ5dGUJMHgxMiwweDkyLDB4NTIsMHhkMiwweDMyLDB4YjIsMHg3MiwweGYyCglieXRlCTB4MGEsMHg4YSwweDRhLDB4Y2EsMHgyYSwweGFhLDB4NmEsMHhlYQoJYnl0ZQkweDFhLDB4OWEsMHg1YSwweGRhLDB4M2EsMHhiYSwweDdhLDB4ZmEKCWJ5dGUJMHgwNiwweDg2LDB4NDYsMHhjNiwweDI2LDB4YTYsMHg2NiwweGU2CglieXRlCTB4MTYsMHg5NiwweDU2LDB4ZDYsMHgzNiwweGI2LDB4NzYsMHhmNgoJYnl0ZQkweDBlLDB4OGUsMHg0ZSwweGNlLDB4MmUsMHhhZSwweDZlLDB4ZWUKCWJ5dGUJMHgxZSwweDllLDB4NWUsMHhkZSwweDNlLDB4YmUsMHg3ZSwweGZlCglieXRlCTB4MDEsMHg4MSwweDQxLDB4YzEsMHgyMSwweGExLDB4NjEsMHhlMQoJYnl0ZQkweDExLDB4OTEsMHg1MSwweGQxLDB4MzEsMHhiMSwweDcxLDB4ZjEKCWJ5dGUJMHgwOSwweDg5LDB4NDksMHhjOSwweDI5LDB4YTksMHg2OSwweGU5CglieXRlCTB4MTksMHg5OSwweDU5LDB4ZDksMHgzOSwweGI5LDB4NzksMHhmOQoJYnl0ZQkweDA1LDB4ODUsMHg0NSwweGM1LDB4MjUsMHhhNSwweDY1LDB4ZTUKCWJ5dGUJMHgxNSwweDk1LDB4NTUsMHhkNSwweDM1LDB4YjUsMHg3NSwweGY1CglieXRlCTB4MGQsMHg4ZCwweDRkLDB4Y2QsMHgyZCwweGFkLDB4NmQsMHhlZAoJYnl0ZQkweDFkLDB4OWQsMHg1ZCwweGRkLDB4M2QsMHhiZCwweDdkLDB4ZmQKCWJ5dGUJMHgwMywweDgzLDB4NDMsMHhjMywweDIzLDB4YTMsMHg2MywweGUzCglieXRlCTB4MTMsMHg5MywweDUzLDB4ZDMsMHgzMywweGIzLDB4NzMsMHhmMwoJYnl0ZQkweDBiLDB4OGIsMHg0YiwweGNiLDB4MmIsMHhhYiwweDZiLDB4ZWIKCWJ5dGUJMHgxYiwweDliLDB4NWIsMHhkYiwweDNiLDB4YmIsMHg3YiwweGZiCglieXRlCTB4MDcsMHg4NywweDQ3LDB4YzcsMHgyNywweGE3LDB4NjcsMHhlNwoJYnl0ZQkweDE3LDB4OTcsMHg1NywweGQ3LDB4MzcsMHhiNywweDc3LDB4ZjcKCWJ5dGUJMHgwZiwweDhmLDB4NGYsMHhjZiwweDJmLDB4YWYsMHg2ZiwweGVmCglieXRlCTB4MWYsMHg5ZiwweDVmLDB4ZGYsMHgzZiwweGJmLDB4N2YsMHhmZgoKCWdsb2JhbAkJZm1vdm1fY2FsY19lYQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIF9mbW92bV9jYWxjX2VhOiBjYWxjdWxhdGUgZWZmZWN0aXZlIGFkZHJlc3MgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmbW92bV9jYWxjX2VhOgoJbW92LmwJCSVkMCwlYTAJCQkjIG1vdmUgIyBieXRlcyB0byBhMAoKIyBjdXJyZW50bHksIE1PREUgYW5kIFJFRyBhcmUgdGFrZW4gZnJvbSB0aGUgRVhDX09QV09SRC4gdGhpcyBjb3VsZCBiZQojIGVhc2lseSBjaGFuZ2VkIGlmIHRoZXkgd2VyZSBpbnB1dHMgcGFzc2VkIGluIHJlZ2lzdGVycy4KCW1vdi53CQlFWENfT1BXT1JEKCVhNiksJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKCW1vdi53CQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQoKCWFuZGkudwkJJjB4M2YsJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAoJYW5kaS5sCQkmMHg3LCVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKCiMganVtcCB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBmb3IgZWFjaCB7TU9ERSxSRUd9IHBhaXIuCgltb3YudwkJKHRibF9mZWFfbW9kZS5iLCVwYywlZDAudyoyKSwlZDAgIyBmZXRjaCBqbXAgZGlzdGFuY2UKCWptcAkJKHRibF9mZWFfbW9kZS5iLCVwYywlZDAudyoxKSAjIGptcCB0byBjb3JyZWN0IGVhIG1vZGUKCglzd2JlZwkJJjY0CnRibF9mZWFfbW9kZToKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCgoJc2hvcnQJCWZhZGRyX2luZF9hMAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hMQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hMgktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hMwktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hNAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hNQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hNgktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9hNwktCXRibF9mZWFfbW9kZQoKCXNob3J0CQlmYWRkcl9pbmRfcF9hMAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9wX2ExCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX3BfYTIJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfcF9hMwktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9wX2E0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX3BfYTUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfcF9hNgktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9wX2E3CS0JdGJsX2ZlYV9tb2RlCgoJc2hvcnQJCWZhZGRyX2luZF9tX2EwCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX21fYTEJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfbV9hMgktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9tX2EzCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX21fYTQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfbV9hNQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9tX2E2CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX21fYTcJLQl0YmxfZmVhX21vZGUKCglzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTAJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9kaXNwX2EyCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTMJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9kaXNwX2E1CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTYJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNwktCXRibF9mZWFfbW9kZQoKCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoKCXNob3J0CQlmYWJzX3Nob3J0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFic19sb25nCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZnBjX2luZAkJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmcGNfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0OiAoQW4pICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZmFkZHJfaW5kX2EwOgoJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlYTAJIyBHZXQgY3VycmVudCBhMAoJcnRzCgpmYWRkcl9pbmRfYTE6Cgltb3YubAkJRVhDX0RSRUdTKzB4YyglYTYpLCVhMAkjIEdldCBjdXJyZW50IGExCglydHMKCmZhZGRyX2luZF9hMjoKCW1vdi5sCQklYTIsJWEwCQkJIyBHZXQgY3VycmVudCBhMgoJcnRzCgpmYWRkcl9pbmRfYTM6Cgltb3YubAkJJWEzLCVhMAkJCSMgR2V0IGN1cnJlbnQgYTMKCXJ0cwoKZmFkZHJfaW5kX2E0OgoJbW92LmwJCSVhNCwlYTAJCQkjIEdldCBjdXJyZW50IGE0CglydHMKCmZhZGRyX2luZF9hNToKCW1vdi5sCQklYTUsJWEwCQkJIyBHZXQgY3VycmVudCBhNQoJcnRzCgpmYWRkcl9pbmRfYTY6Cgltb3YubAkJKCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE2CglydHMKCmZhZGRyX2luZF9hNzoKCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTcKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHBvc3RpbmNyZW1lbnQ6IChBbikrICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZmFkZHJfaW5kX3BfYTA6Cgltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAkjIEdldCBjdXJyZW50IGEwCgltb3YubAkJJWQwLCVkMQoJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAoJbW92LmwJCSVkMSxFWENfRFJFR1MrMHg4KCVhNikJIyBTYXZlIGluY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9wX2ExOgoJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMQoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsRVhDX0RSRUdTKzB4YyglYTYpCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfcF9hMjoKCW1vdi5sCQklYTIsJWQwCQkJIyBHZXQgY3VycmVudCBhMgoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsJWEyCQkJIyBTYXZlIGluY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9wX2EzOgoJbW92LmwJCSVhMywlZDAJCQkjIEdldCBjdXJyZW50IGEzCgltb3YubAkJJWQwLCVkMQoJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAoJbW92LmwJCSVkMSwlYTMJCQkjIFNhdmUgaW5jciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX3BfYTQ6Cgltb3YubAkJJWE0LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTQKCW1vdi5sCQklZDAsJWQxCglhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50Cgltb3YubAkJJWQxLCVhNAkJCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfcF9hNToKCW1vdi5sCQklYTUsJWQwCQkJIyBHZXQgY3VycmVudCBhNQoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsJWE1CQkJIyBTYXZlIGluY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9wX2E2OgoJbW92LmwJCSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsKCVhNikJCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfcF9hNzoKCW1vdi5iCQkmbWlhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKCgltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3Cgltb3YubAkJJWQwLCVkMQoJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAoJbW92LmwJCSVkMSxFWENfQTcoJWE2KQkJIyBTYXZlIGluY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHByZWRlY3JlbWVudDogLShBbikgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhZGRyX2luZF9tX2EwOgoJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMAoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9tX2ExOgoJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMQoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9tX2EyOgoJbW92LmwJCSVhMiwlZDAJCQkjIEdldCBjdXJyZW50IGEyCglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLCVhMgkJCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfbV9hMzoKCW1vdi5sCQklYTMsJWQwCQkJIyBHZXQgY3VycmVudCBhMwoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCwlYTMJCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX21fYTQ6Cgltb3YubAkJJWE0LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTQKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsJWE0CQkJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9tX2E1OgoJbW92LmwJCSVhNSwlZDAJCQkjIEdldCBjdXJyZW50IGE1CglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLCVhNQkJCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfbV9hNjoKCW1vdi5sCQkoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTYKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsKCVhNikJCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfbV9hNzoKCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKCgltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3CglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BNyglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgQW4pICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZmFkZHJfaW5kX2Rpc3BfYTA6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVhMAkjIGEwICsgZDE2CglydHMKCmZhZGRyX2luZF9kaXNwX2ExOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CgoJYWRkLmwJCUVYQ19EUkVHUysweGMoJWE2KSwlYTAJIyBhMSArIGQxNgoJcnRzCgpmYWRkcl9pbmRfZGlzcF9hMjoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQklYTIsJWEwCQkJIyBhMiArIGQxNgoJcnRzCgpmYWRkcl9pbmRfZGlzcF9hMzoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQklYTMsJWEwCQkJIyBhMyArIGQxNgoJcnRzCgpmYWRkcl9pbmRfZGlzcF9hNDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQklYTQsJWEwCQkJIyBhNCArIGQxNgoJcnRzCgpmYWRkcl9pbmRfZGlzcF9hNToKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQklYTUsJWEwCQkJIyBhNSArIGQxNgoJcnRzCgpmYWRkcl9pbmRfZGlzcF9hNjoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQkoJWE2KSwlYTAJCSMgYTYgKyBkMTYKCXJ0cwoKZmFkZHJfaW5kX2Rpc3BfYTc6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJRVhDX0E3KCVhNiksJWEwCQkjIGE3ICsgZDE2CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGQ4LCBBbiwgWG4pICMKIyAgICAiICAgICAgICIgICAgICAgICAiICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBBbiwgWG4pICAjCiMgTWVtb3J5IGluZGlyZWN0IHBvc3RpbmRleGVkOiAoW2JkLCBBbl0sIFhuLCBvZCkJCSAgICAgICAjCiMgTWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIEFuLCBYbl0sIG9kKQkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhZGRyX2luZF9leHQ6CglhZGRxLmwJCSYweDgsJWQxCglic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBiYXNlIGFyZWcKCW1vdi5sCQklZDAsLSglc3ApCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHR3b3JkIGluIGQwCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQkoJXNwKSssJWEwCgoJYnRzdAkJJjB4OCwlZDAKCWJuZS53CQlmY2FsY19tZW1faW5kCgoJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBob2xkIG9wd29yZAoKCW1vdi5sCQklZDAsJWQxCglyb2wudwkJJjB4NCwlZDEKCWFuZGkudwkJJjB4ZiwlZDEJCSMgZXh0cmFjdCBpbmRleCByZWdubwoKIyBjb3VudCBvbiBmZXRjaF9kcmVnKCkgbm90IHRvIGFsdGVyIGEwLi4uCglic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBpbmRleAoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDIJCSMgZmV0Y2ggb3B3b3JkCgoJYnRzdAkJJjB4YiwlZDIJCSMgaXMgaXQgd29yZCBvciBsb25nPwoJYm5lLmIJCWZhaWk4X2xvbmcKCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIHdvcmQgaW5kZXgKZmFpaThfbG9uZzoKCW1vdi5sCQklZDIsJWQxCglyb2wudwkJJjB4NywlZDEKCWFuZGkubAkJJjB4MywlZDEJCSMgZXh0cmFjdCBzY2FsZSB2YWx1ZQoKCWxzbC5sCQklZDEsJWQwCQkJIyBzaGlmdCBpbmRleCBieSBzY2FsZQoKCWV4dGIubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCWFkZC5sCQklZDIsJWQwCQkJIyBpbmRleCArIGRpc3AKCWFkZC5sCQklZDAsJWEwCQkJIyBBbiArIChpbmRleCArIGRpc3ApCgoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBvbGQgZDIKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWJzb2x1dGUgc2hvcnQ6IChYWFgpLlcgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZmFic19zaG9ydDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc2hvcnQgYWRkcmVzcwoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgcmV0dXJuIDxlYT4gaW4gYTAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBYnNvbHV0ZSBsb25nOiAoWFhYKS5MICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZmFic19sb25nOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBsb25nIGFkZHJlc3MKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBQcm9ncmFtIGNvdW50ZXIgaW5kaXJlY3Qgdy8gZGlzcGxhY2VtZW50OiAoZDE2LCBQQykgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZwY19pbmQ6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIHdvcmQgZGlzcGxhY2VtZW50CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwYyArIGQxNgoKIyBfaW1lbV9yZWFkX3dvcmQoKSBpbmNyZWFzZWQgdGhlIGV4dHdwdHIgYnkgMi4gbmVlZCB0byBhZGp1c3QgaGVyZS4KCXN1YnEubAkJJjB4MiwlYTAJCSMgYWRqdXN0IDxlYT4KCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFBDIGluZGlyZWN0IHcvIGluZGV4KDgtYml0IGRpc3BsYWNlbWVudCk6IChkOCwgUEMsIEFuKSAjCiMgIiAgICAgIiAgICAgdy8gICAiICAoYmFzZSBkaXNwbGFjZW1lbnQpOiAoYmQsIFBDLCBBbikgICMKIyBQQyBtZW1vcnkgaW5kaXJlY3QgcG9zdGluZGV4ZWQ6IChbYmQsIFBDXSwgWG4sIG9kKSAgICAgIwojIFBDIG1lbW9yeSBpbmRpcmVjdCBwcmVpbmRleGVkOiAoW2JkLCBQQywgWG5dLCBvZCkgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZnBjX2luZF9leHQ6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIGV4dCB3b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHB1dCBiYXNlIGluIGEwCglzdWJxLmwJCSYweDIsJWEwCQkjIGFkanVzdCBiYXNlCgoJYnRzdAkJJjB4OCwlZDAJCSMgaXMgZGlzcCBvbmx5IDggYml0cz8KCWJuZS53CQlmY2FsY19tZW1faW5kCQkjIGNhbGMgbWVtb3J5IGluZGlyZWN0CgoJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzdG9yZSBvcHdvcmQKCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBleHR3b3JkIGNvcHkKCXJvbC53CQkmMHg0LCVkMQkJIyByb3RhdGUgcmVnIG51bSBpbnRvIHBsYWNlCglhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgcmVnaXN0ZXIgbnVtYmVyCgojIGNvdW50IG9uIGZldGNoX2RyZWcoKSBub3QgdG8gYWx0ZXIgYTAuLi4KCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIGluZGV4CgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LmwJCUxfU0NSMSglYTYpLCVkMgkJIyBmZXRjaCBvcHdvcmQKCglidHN0CQkmMHhiLCVkMgkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CglibmUuYgkJZnBpaThfbG9uZwkJIyBsb25nCglleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCB3b3JkIGluZGV4CmZwaWk4X2xvbmc6Cgltb3YubAkJJWQyLCVkMQoJcm9sLncJCSYweDcsJWQxCQkjIHJvdGF0ZSBzY2FsZSB2YWx1ZSBpbnRvIHBsYWNlCglhbmRpLmwJCSYweDMsJWQxCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKCglsc2wubAkJJWQxLCVkMAkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKCglleHRiLmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CglhZGQubAkJJWQyLCVkMAkJCSMgZGlzcCArIGluZGV4CglhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQoKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgoJcnRzCgojIGQyID0gaW5kZXgKIyBkMyA9IGJhc2UKIyBkNCA9IG9kCiMgZDUgPSBleHR3b3JkCmZjYWxjX21lbV9pbmQ6CglidHN0CQkmMHg2LCVkMAkJIyBpcyB0aGUgaW5kZXggc3VwcHJlc3NlZD8KCWJlcS5iCQlmY2FsY19pbmRleAoKCW1vdm0ubAkJJjB4M2MwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNQoKCW1vdi5sCQklZDAsJWQ1CQkJIyBwdXQgZXh0d29yZCBpbiBkNQoJbW92LmwJCSVhMCwlZDMJCQkjIHB1dCBiYXNlIGluIGQzCgoJY2xyLmwJCSVkMgkJCSMgeWVzLCBzbyBpbmRleCA9IDAKCWJyYS5iCQlmYmFzZV9zdXBwX2NrCgojIGluZGV4OgpmY2FsY19pbmRleDoKCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc2F2ZSBkMCAob3B3b3JkKQoJYmZleHR1CQklZDB7JjE2OiY0fSwlZDEJCSMgZmV0Y2ggZHJlZyBpbmRleAoJYnNyLmwJCWZldGNoX2RyZWcKCgltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKCW1vdi5sCQklZDAsJWQyCQkJIyBwdXQgaW5kZXggaW4gZDIKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDUKCW1vdi5sCQklYTAsJWQzCgoJYnRzdAkJJjB4YiwlZDUJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPwoJYm5lLmIJCWZub19leHQKCWV4dC5sCQklZDIKCmZub19leHQ6CgliZmV4dHUJCSVkNXsmMjE6JjJ9LCVkMAoJbHNsLmwJCSVkMCwlZDIKCiMgYmFzZSBhZGRyZXNzIChwYXNzZWQgYXMgcGFyYW1ldGVyIGluIGQzKToKIyB3ZSBjbGVhciB0aGUgdmFsdWUgaGVyZSBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgc3VwcHJlc3NlZC4KZmJhc2Vfc3VwcF9jazoKCWJ0c3QJCSYweDcsJWQ1CQkjIGlzIHRoZSBiZCBzdXBwcmVzc2VkPwoJYmVxLmIJCWZub19iYXNlX3N1cAoJY2xyLmwJCSVkMwoKIyBiYXNlIGRpc3BsYWNlbWVudDoKZm5vX2Jhc2Vfc3VwOgoJYmZleHR1CQklZDV7JjI2OiYyfSwlZDAJCSMgZ2V0IGJkIHNpemUKIwliZXEubAkJZm1vdm1fZXJyb3IJCSMgaWYgKHNpemUgPT0gMCkgaXQncyByZXNlcnZlZAoKCWNtcGkuYgkJJWQwLCYweDIKCWJsdC5iCQlmbm9fYmQKCWJlcS5iCQlmZ2V0X3dvcmRfYmQKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKCglicmEuYgkJZmNoa19pbmQKCmZnZXRfd29yZF9iZDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJZmNlYV9pYWNjCQkjIHllcwoKCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGJkCgpmY2hrX2luZDoKCWFkZC5sCQklZDAsJWQzCQkJIyBiYXNlICs9IGJkCgojIG91dGVyIGRpc3BsYWNlbWVudDoKZm5vX2JkOgoJYmZleHR1CQklZDV7JjMwOiYyfSwlZDAJCSMgaXMgb2Qgc3VwcHJlc3NlZD8KCWJlcS53CQlmYWlpX2JkCgoJY21waS5iCQklZDAsJjB4MgoJYmx0LmIJCWZudWxsX29kCgliZXEuYgkJZndvcmRfb2QKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKCglicmEuYgkJZmFkZF90aGVtCgpmd29yZF9vZDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJZmNlYV9pYWNjCQkjIHllcwoKCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIG9kCglicmEuYgkJZmFkZF90aGVtCgpmbnVsbF9vZDoKCWNsci5sCQklZDAKCmZhZGRfdGhlbToKCW1vdi5sCQklZDAsJWQ0CgoJYnRzdAkJJjB4MiwlZDUJCSMgcHJlIG9yIHBvc3QgaW5kZXhpbmc/CgliZXEuYgkJZnByZV9pbmRleGVkCgoJbW92LmwJCSVkMywlYTAKCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKCgl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CglibmUudwkJZmNlYV9lcnIJCSMgeWVzCgoJYWRkLmwJCSVkMiwlZDAJCQkjIDxlYT4gKz0gaW5kZXgKCWFkZC5sCQklZDQsJWQwCQkJIyA8ZWE+ICs9IG9kCglicmEuYgkJZmRvbmVfZWEKCmZwcmVfaW5kZXhlZDoKCWFkZC5sCQklZDIsJWQzCQkJIyBwcmVpbmRleGluZwoJbW92LmwJCSVkMywlYTAKCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKCgl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CglibmUudwkJZmNlYV9lcnIJCSMgeWVzCgoJYWRkLmwJCSVkNCwlZDAJCQkjIGVhICs9IG9kCglicmEuYgkJZmRvbmVfZWEKCmZhaWlfYmQ6CglhZGQubAkJJWQyLCVkMwkJCSMgZWEgPSAoYmFzZSArIGJkKSArIGluZGV4Cgltb3YubAkJJWQzLCVkMApmZG9uZV9lYToKCW1vdi5sCQklZDAsJWEwCgoJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmY2VhX2VycjoKCW1vdi5sCQklZDMsJWEwCgoJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1Cgltb3YudwkJJjB4MDEwMSwlZDAKCWJyYS5sCQlpZWFfZGFjYwoKZmNlYV9pYWNjOgoJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CglicmEubAkJaWVhX2lhY2MKCmZtb3ZtX291dF9lcnI6Cglic3IubAkJcmVzdG9yZQoJbW92LncJCSYweDAwZTEsJWQwCglicmEuYgkJZm1vdm1fZXJyCgpmbW92bV9pbl9lcnI6Cglic3IubAkJcmVzdG9yZQoJbW92LncJCSYweDAxNjEsJWQwCgpmbW92bV9lcnI6Cgltb3YubAkJTF9TQ1IxKCVhNiksJWEwCglicmEubAkJaWVhX2RhY2MKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZtb3ZtX2N0cmwoKTogZW11bGF0ZSBmbW92bS5sIG9mIGNvbnRyb2wgcmVnaXN0ZXJzIGluc3RyCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBsb25nd29yZCBmcm9tIG1lbW9yeQkJCSMKIwlpZWFfaWFjYygpIC0gX2ltZW1fcmVhZF9sb25nKCkgZmFpbGVkOyBlcnJvciByZWNvdmVyeQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgX2ltZW1fcmVhZF9sb25nKCkgZG9lc24ndCBmYWlsOgkJCQkjCiMJCVVTRVJfRlBDUihhNikgID0gbmV3IEZQQ1IgdmFsdWUJCQkJIwojCQlVU0VSX0ZQU1IoYTYpICA9IG5ldyBGUFNSIHZhbHVlCQkJCSMKIwkJVVNFUl9GUElBUihhNikgPSBuZXcgRlBJQVIgdmFsdWUJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlEZWNvZGUgdGhlIGluc3RydWN0aW9uIHR5cGUgYnkgbG9va2luZyBhdCB0aGUgZXh0ZW5zaW9uIHdvcmQJIwojIGluIG9yZGVyIHRvIHNlZSBob3cgbWFueSBjb250cm9sIHJlZ2lzdGVycyB0byBmZXRjaCBmcm9tIG1lbW9yeS4JIwojIEZldGNoIHRoZW0gdXNpbmcgX2ltZW1fcmVhZF9sb25nKCkuIElmIHRoaXMgZmV0Y2ggZmFpbHMsIGV4aXQgdGhyb3VnaAkjCiMgdGhlIHNwZWNpYWwgYWNjZXNzIGVycm9yIGV4aXQgaGFuZGxlciBpZWFfaWFjYygpLgkJCSMKIwkJCQkJCQkJCSMKIyBJbnN0cnVjdGlvbiB3b3JkIGRlY29kaW5nOgkJCQkJCSMKIwkJCQkJCQkJCSMKIwlmbW92ZW0ubCAjPGRhdGE+LCB7RlBJQVImfEZQQ1ImfEZQU1J9CQkJCSMKIwkJCQkJCQkJCSMKIwkJV09SRDEJCQlXT1JEMgkJCQkjCiMJMTExMSAwMDEwIDAwIDExMTEwMAkxMDAkICQkMDAgMDAwMCAwMDAwCQkJIwojCQkJCQkJCQkJIwojCSQkJCAoMTAwKTogRlBDUgkJCQkJCQkjCiMJICAgICgwMTApOiBGUFNSCQkJCQkJCSMKIwkgICAgKDAwMSk6IEZQSUFSCQkJCQkJIwojCSAgICAoMDAwKTogRlBJQVIJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZtb3ZtX2N0cmwKZm1vdm1fY3RybDoKCW1vdi5iCQlFWENfRVhUV09SRCglYTYpLCVkMAkjIGZldGNoIHJlZyBzZWxlY3QgYml0cwoJY21waS5iCQklZDAsJjB4OWMJCSMgZnBjciAmIGZwc3IgJiBmcGlhciA/CgliZXEudwkJZmN0cmxfaW5fNwkJIyB5ZXMKCWNtcGkuYgkJJWQwLCYweDk4CQkjIGZwY3IgJiBmcHNyID8KCWJlcS53CQlmY3RybF9pbl82CQkjIHllcwoJY21waS5iCQklZDAsJjB4OTQJCSMgZnBjciAmIGZwaWFyID8KCWJlcS5iCQlmY3RybF9pbl81CQkjIHllcwoKIyBmbW92ZW0ubCAjPGRhdGE+LCBmcHNyL2ZwaWFyCmZjdHJsX2luXzM6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIG5ldyBGUFNSIHRvIHN0YWNrCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUElBUiglYTYpCSMgc3RvcmUgbmV3IEZQSUFSIHRvIHN0YWNrCglydHMKCiMgZm1vdmVtLmwgIzxkYXRhPiwgZnBjci9mcGlhcgpmY3RybF9pbl81OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUENSKCVhNikJIyBzdG9yZSBuZXcgRlBDUiB0byBzdGFjawoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUElBUiBmcm9tIG1lbQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLFVTRVJfRlBJQVIoJWE2KQkjIHN0b3JlIG5ldyBGUElBUiB0byBzdGFjawoJcnRzCgojIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBzcgpmY3RybF9pbl82OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUENSKCVhNikJIyBzdG9yZSBuZXcgRlBDUiB0byBtZW0KCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBTUiBmcm9tIG1lbQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gbWVtCglydHMKCiMgZm1vdmVtLmwgIzxkYXRhPiwgZnBjci9mcHNyL2ZwaWFyCmZjdHJsX2luXzc6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCxVU0VSX0ZQQ1IoJWE2KQkjIHN0b3JlIG5ldyBGUENSIHRvIG1lbQoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUFNSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzdG9yZSBuZXcgRlBTUiB0byBtZW0KCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBJQVIgZnJvbSBtZW0KCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gbWVtCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhZGRzdWJfc2NhbGVyMigpOiBzY2FsZSBpbnB1dHMgdG8gZmFkZC9mc3ViIHN1Y2ggdGhhdCBubwkjCiMJCQkgIE9WRkwvVU5GTCBleGNlcHRpb25zIHdpbGwgcmVzdWx0CQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub3JtKCkgLSBub3JtYWxpemUgbWFudGlzc2EgYWZ0ZXIgYWRqdXN0aW5nIGV4cG9uZW50CQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9TUkMoYTYpID0gZnAgb3AxKHNyYykJCQkJCSMKIwlGUF9EU1QoYTYpID0gZnAgb3AyKGRzdCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NSQyhhNikgPSBmcCBvcDEgc2NhbGVkKHNyYykJCQkJCSMKIwlGUF9EU1QoYTYpID0gZnAgb3AyIHNjYWxlZChkc3QpCQkJCQkjCiMJZDAgICAgICAgICA9IHNjYWxlIGFtb3VudAkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgdGhlIERTVCBleHBvbmVudCBpcyA+IHRoZSBTUkMgZXhwb25lbnQsIHNldCB0aGUgRFNUIGV4cG9uZW50CSMKIyBlcXVhbCB0byAweDNmZmYgYW5kIHNjYWxlIHRoZSBTUkMgZXhwb25lbnQgYnkgdGhlIHZhbHVlIHRoYXQgdGhlCSMKIyBEU1QgZXhwb25lbnQgd2FzIHNjYWxlZCBieS4gSWYgdGhlIFNSQyBleHBvbmVudCBpcyBncmVhdGVyIG9yIGVxdWFsLAkjCiMgZG8gdGhlIG9wcG9zaXRlLiBSZXR1cm4gdGhpcyBzY2FsZSBmYWN0b3IgaW4gZDAuCQkJIwojCUlmIHRoZSB0d28gZXhwb25lbnRzIGRpZmZlciBieSA+IHRoZSBudW1iZXIgb2YgbWFudGlzc2EgYml0cwkjCiMgcGx1cyB0d28sIHRoZW4gc2V0IHRoZSBzbWFsbGVzdCBleHBvbmVudCB0byBhIHZlcnkgc21hbGwgdmFsdWUgYXMgYQkjCiMgcXVpY2sgc2hvcnRjdXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJYWRkc3ViX3NjYWxlcjIKYWRkc3ViX3NjYWxlcjI6Cgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCgltb3YudwkJU1JDX0VYKCVhMCksJWQwCgltb3YudwkJRFNUX0VYKCVhMSksJWQxCgltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKCglhbmRpLncJCSYweDdmZmYsJWQwCglhbmRpLncJCSYweDdmZmYsJWQxCgltb3YudwkJJWQwLExfU0NSMSglYTYpCQkjIHN0b3JlIHNyYyBleHBvbmVudAoJbW92LncJCSVkMSwyK0xfU0NSMSglYTYpCSMgc3RvcmUgZHN0IGV4cG9uZW50CgoJY21wLncJCSVkMCwgJWQxCQkjIGlzIHNyYyBleHAgPj0gZHN0IGV4cD8KCWJnZS5sCQlzcmNfZXhwX2dlMgoKIyBkc3QgZXhwIGlzID4gIHNyYyBleHA7IHNjYWxlIGRzdCB0byBleHAgPSAweDNmZmYKZHN0X2V4cF9ndDI6Cglic3IubAkJc2NhbGVfdG9femVyb19kc3QKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yCgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CglibmUuYgkJY21wZXhwMTIKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIGRlbm9ybTsgcmVzdWx0IGlzIG5ldyBleHAKCW5lZy53CQklZDAJCQkjIG5ldyBleHAgPSAtKHNoZnQgdmFsKQoJbW92LncJCSVkMCxMX1NDUjEoJWE2KQkJIyBpbnNldCBuZXcgZXhwCgpjbXBleHAxMjoKCW1vdi53CQkyK0xfU0NSMSglYTYpLCVkMAoJc3ViaS53CQkmbWFudGlzc2FsZW4rMiwlZDAJIyBzdWJ0cmFjdCBtYW50aXNzYWxlbisyIGZyb20gbGFyZ2VyIGV4cAoKCWNtcC53CQklZDAsTF9TQ1IxKCVhNikJCSMgaXMgZGlmZmVyZW5jZSA+PSBsZW4obWFudGlzc2EpKzI/CgliZ2UuYgkJcXVpY2tfc2NhbGUxMgoKCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKCWFkZC53CQkweDIoJXNwKSwlZDAJCSMgc2NhbGUgc3JjIGV4cG9uZW50IGJ5IHNjYWxlIGZhY3RvcgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEKCWFuZC53CQkmMHg4MDAwLCVkMQoJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IHtzZ24sbmV3IGV4cH0KCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBkc3QgZXhwb25lbnQKCgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXR1cm4gU0NBTEUgZmFjdG9yCglydHMKCnF1aWNrX3NjYWxlMTI6CglhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMgemVybyBzcmMgZXhwb25lbnQKCWJzZXQJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBzZXQgZXhwID0gMQoKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKCXJ0cwoKIyBzcmMgZXhwIGlzID49IGRzdCBleHA7IHNjYWxlIHNyYyB0byBleHAgPSAweDNmZmYKc3JjX2V4cF9nZTI6Cglic3IubAkJc2NhbGVfdG9femVyb19zcmMKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yCgoJY21waS5iCQlEVEFHKCVhNiksJkRFTk9STQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CglibmUuYgkJY21wZXhwMjIKCWxlYQkJRlBfU0NSMSglYTYpLCVhMAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgZGVub3JtOyByZXN1bHQgaXMgbmV3IGV4cAoJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCB2YWwpCgltb3YudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpbnNldCBuZXcgZXhwCgpjbXBleHAyMjoKCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKCXN1YmkudwkJJm1hbnRpc3NhbGVuKzIsJWQwCSMgc3VidHJhY3QgbWFudGlzc2FsZW4rMiBmcm9tIGxhcmdlciBleHAKCgljbXAudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpcyBkaWZmZXJlbmNlID49IGxlbihtYW50aXNzYSkrMj8KCWJnZS5iCQlxdWlja19zY2FsZTIyCgoJbW92LncJCTIrTF9TQ1IxKCVhNiksJWQwCglhZGQudwkJMHgyKCVzcCksJWQwCQkjIHNjYWxlIGRzdCBleHBvbmVudCBieSBzY2FsZSBmYWN0b3IKCW1vdi53CQlGUF9TQ1IxX0VYKCVhNiksJWQxCglhbmRpLncJCSYweDgwMDAsJWQxCglvci53CQklZDEsJWQwCQkJIyBjb25jYXQge3NnbixuZXcgZXhwfQoJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGRzdCBleHBvbmVudAoKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKCXJ0cwoKcXVpY2tfc2NhbGUyMjoKCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IxX0VYKCVhNikJIyB6ZXJvIGRzdCBleHBvbmVudAoJYnNldAkJJjB4MCwxK0ZQX1NDUjFfRVgoJWE2KQkjIHNldCBleHAgPSAxCgoJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfdG9femVyb19zcmMoKTogc2NhbGUgdGhlIGV4cG9uZW50IG9mIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJCQkgICAgIHZhbHVlIGF0IEZQX1NDUjAoYTYpLgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjAoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9TQ1IwKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKIyBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGV4cG9uZW50LiBUaGVuLAkjCiMgbm9ybWFsaXplIHRoZSBvcGVyYW5kIGlmIGl0IHdhcyBhIERFTk9STS4gQWRkIHRoaXMgbm9ybWFsaXphdGlvbgkjCiMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNjYWxlX3RvX3plcm9fc3JjCnNjYWxlX3RvX3plcm9fc3JjOgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQoKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKCglhbmRpLncJCSYweDgwMDAsJWQwCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgoJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgYmlhc2VkIGV4cG9uZW50CgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJlcS5iCQlzdHpzX2Rlbm9ybQkJIyBub3JtYWxpemUgdGhlIERFTk9STQoKc3R6c19ub3JtOgoJbW92LmwJCSYweDNmZmYsJWQwCglzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCgoJcnRzCgpzdHpzX2Rlbm9ybToKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIHNyYyBvcAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBkZW5vcm0KCW5lZy5sCQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCgltb3YubAkJJWQwLCVkMQkJCSMgcHJlcGFyZSBmb3Igb3Bfbm9ybSBjYWxsCglicmEuYgkJc3R6c19ub3JtCQkjIGZpbmlzaCBzY2FsaW5nCgojIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNjYWxlX3NxcnQoKTogc2NhbGUgdGhlIGlucHV0IG9wZXJhbmQgZXhwb25lbnQgc28gYSBzdWJzZXF1ZW50CSMKIwkJICAgICAgZnNxcnQgb3BlcmF0aW9uIHdvbid0IHRha2UgYW4gZXhjZXB0aW9uLgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRlBfU0NSMChhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjAoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIwojCWQwCSAgICA9IHNjYWxlIHZhbHVlCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiB0aGUgaW5wdXQgb3BlcmFuZCBpcyBhIERFTk9STSwgbm9ybWFsaXplIGl0LgkJCSMKIwlJZiB0aGUgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgaXMgZXZlbiwgc2V0IHRoZSBleHBvbmVudAkjCiMgdG8gMHgzZmZlIGFuZCByZXR1cm4gYSBzY2FsZSBmYWN0b3Igb2YgIihleHAtMHgzZmZlKS8yIi4gSWYgdGhlCSMKIyBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCBpcyBvZmYsIHNldCB0aGUgZXhwb25lbnQgdG8gb3gzZmZmIGFuZAkjCiMgcmV0dXJuIGEgc2NhbGUgZmFjdG9yIG9mICIoZXhwLTB4M2ZmZikvMiIuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc2NhbGVfc3FydApzY2FsZV9zcXJ0OgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJlcS5iCQlzc19kZW5vcm0JCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHtzZ24sZXhwfQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBleHRyYWN0IG9wZXJhbmQncyBleHBvbmVudAoKCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBleHRyYWN0IG9wZXJhbmQncyBzZ24KCglidHN0CQkmMHgwLCVkMQkJIyBpcyBleHAgZXZlbiBvciBvZGQ/CgliZXEuYgkJc3Nfbm9ybV9ldmVuCgoJb3JpLncJCSYweDNmZmYsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJbW92LmwJCSYweDNmZmYsJWQwCglzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCglhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCglydHMKCnNzX25vcm1fZXZlbjoKCW9yaS53CQkmMHgzZmZlLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQoKCW1vdi5sCQkmMHgzZmZlLCVkMAoJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQoJYXNyLmwJCSYweDEsJWQwCQkjIGRpdmlkZSBzY2FsZSBmYWN0b3IgYnkgMgoJcnRzCgpzc19kZW5vcm06CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBzcmMgb3AKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZGVub3JtCgoJYnRzdAkJJjB4MCwlZDAJCSMgaXMgZXhwIGV2ZW4gb3Igb2RkPwoJYmVxLmIJCXNzX2Rlbm9ybV9ldmVuCgoJb3JpLncJCSYweDNmZmYsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJYWRkLmwJCSYweDNmZmYsJWQwCglhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCglydHMKCnNzX2Rlbm9ybV9ldmVuOgoJb3JpLncJCSYweDNmZmUsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJYWRkLmwJCSYweDNmZmUsJWQwCglhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCglydHMKCiMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfdG9femVyb19kc3QoKTogc2NhbGUgdGhlIGV4cG9uZW50IG9mIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJCQkgICAgIHZhbHVlIGF0IEZQX1NDUjEoYTYpLgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjEoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9TQ1IxKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKIyBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGV4cG9uZW50LiBUaGVuLAkjCiMgbm9ybWFsaXplIHRoZSBvcGVyYW5kIGlmIGl0IHdhcyBhIERFTk9STS4gQWRkIHRoaXMgbm9ybWFsaXphdGlvbgkjCiMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNjYWxlX3RvX3plcm9fZHN0CnNjYWxlX3RvX3plcm9fZHN0OgoJbW92LncJCUZQX1NDUjFfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQoKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKCglhbmRpLncJCSYweDgwMDAsJWQwCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgoJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgYmlhc2VkIGV4cG9uZW50CgoJY21waS5iCQlEVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJlcS5iCQlzdHpkX2Rlbm9ybQkJIyBub3JtYWxpemUgdGhlIERFTk9STQoKc3R6ZF9ub3JtOgoJbW92LmwJCSYweDNmZmYsJWQwCglzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCglydHMKCnN0emRfZGVub3JtOgoJbGVhCQlGUF9TQ1IxKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gZHN0IG9wCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQoJbmVnLmwJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKCW1vdi5sCQklZDAsJWQxCQkJIyBwcmVwYXJlIGZvciBvcF9ub3JtIGNhbGwKCWJyYS5iCQlzdHpkX25vcm0JCSMgZmluaXNoIHNjYWxpbmcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlyZXNfcW5hbigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgdy8gUU5BTiBvcGVyYW5kIGZvciBkeWFkaWMJIwojCXJlc19zbmFuKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCB3LyBTTkFOIG9wZXJhbmQgZm9yIGR5YWRpYwkjCiMJcmVzX3FuYW5fMW9wKCk6IHJldHVybiBkZmx0IHJlc3VsdCB3LyBRTkFOIG9wZXJhbmQgZm9yIG1vbmFkaWMJIwojCXJlc19zbmFuXzFvcCgpOiByZXR1cm4gZGZsdCByZXN1bHQgdy8gU05BTiBvcGVyYW5kIGZvciBtb25hZGljCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NSQyhhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzcmMgb3BlcmFuZAkJIwojCUZQX0RTVChhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkc3Qgb3BlcmFuZAkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBlaXRoZXIgb3BlcmFuZCAoYnV0IG5vdCBib3RoIG9wZXJhbmRzKSBvZiBhbiBvcGVyYXRpb24gaXMgYQkjCiMgbm9uc2lnbmFsbGluZyBOQU4sIHRoZW4gdGhhdCBOQU4gaXMgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4gSWYgYm90aAkjCiMgb3BlcmFuZHMgYXJlIG5vbnNpZ25hbGxpbmcgTkFOcywgdGhlbiB0aGUgZGVzdGluYXRpb24gb3BlcmFuZAkJIwojIG5vbnNpZ25hbGxpbmcgTkFOIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQuCQkJCSMKIwlJZiBlaXRoZXIgb3BlcmFuZCB0byBhbiBvcGVyYXRpb24gaXMgYSBzaWduYWxsaW5nIE5BTiAoU05BTiksCSMKIyB0aGVuLCB0aGUgU05BTiBiaXQgaXMgc2V0IGluIHRoZSBGUFNSIEVYQyBieXRlLiBJZiB0aGUgU05BTiB0cmFwCSMKIyBlbmFibGUgYml0IGlzIHNldCBpbiB0aGUgRlBDUiwgdGhlbiB0aGUgdHJhcCBpcyB0YWtlbiBhbmQgdGhlCQkjCiMgZGVzdGluYXRpb24gaXMgbm90IG1vZGlmaWVkLiBJZiB0aGUgU05BTiB0cmFwIGVuYWJsZSBiaXQgaXMgbm90IHNldCwJIwojIHRoZW4gdGhlIFNOQU4gaXMgY29udmVydGVkIHRvIGEgbm9uc2lnbmFsbGluZyBOQU4gKGJ5IHNldHRpbmcgdGhlCSMKIyBTTkFOIGJpdCBpbiB0aGUgb3BlcmFuZCB0byBvbmUpLCBhbmQgdGhlIG9wZXJhdGlvbiBjb250aW51ZXMgYXMJIwojIGRlc2NyaWJlZCBpbiB0aGUgcHJlY2VkaW5nIHBhcmFncmFwaCwgZm9yIG5vbnNpZ25hbGxpbmcgTkFOcy4JCSMKIwlNYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIEZQU1IgYml0cyBhcmUgc2V0IGJlZm9yZSBleGl0aW5nLgkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXJlc19xbmFuCglnbG9iYWwJCXJlc19zbmFuCnJlc19xbmFuOgpyZXNfc25hbjoKCWNtcC5iCQlEVEFHKCVhNiksICZTTkFOCSMgaXMgdGhlIGRzdCBhbiBTTkFOPwoJYmVxLmIJCWRzdF9zbmFuMgoJY21wLmIJCURUQUcoJWE2KSwgJlFOQU4JIyBpcyB0aGUgZHN0IGEgIFFOQU4/CgliZXEuYgkJZHN0X3FuYW4yCnNyY19uYW46CgljbXAuYgkJU1RBRyglYTYpLCAmUU5BTgoJYmVxLmIJCXNyY19xbmFuMgoJZ2xvYmFsCQlyZXNfc25hbl8xb3AKcmVzX3NuYW5fMW9wOgpzcmNfc25hbjI6Cglic2V0CQkmMHg2LCBGUF9TUkNfSEkoJWE2KQkjIHNldCBTTkFOIGJpdAoJb3IubAkJJm5hbl9tYXNrK2Fpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCWJyYS5iCQluYW5fY29tcAoJZ2xvYmFsCQlyZXNfcW5hbl8xb3AKcmVzX3FuYW5fMW9wOgpzcmNfcW5hbjI6Cglvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCWJyYS5iCQluYW5fY29tcApkc3Rfc25hbjI6Cglvci5sCQkmbmFuX21hc2srYWlvcF9tYXNrK3NuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKCWJzZXQJCSYweDYsIEZQX0RTVF9ISSglYTYpCSMgc2V0IFNOQU4gYml0CglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCWJyYS5iCQluYW5fY29tcApkc3RfcW5hbjI6CglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCWNtcC5iCQlTVEFHKCVhNiksICZTTkFOCglibmUJCW5hbl9kb25lCglvci5sCQkmYWlvcF9tYXNrK3NuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKbmFuX2RvbmU6Cglvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCm5hbl9jb21wOgoJYnRzdAkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIGlzIE5BTiBuZWc/CgliZXEuYgkJbmFuX25vdF9uZWcKCW9yLmwJCSZuZWdfbWFzaywgVVNFUl9GUFNSKCVhNikKbmFuX25vdF9uZWc6CglmbW92bS54CQkoJWEwKSwgJjB4ODAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJcmVzX29wZXJyKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCBkdXJpbmcgb3BlcmFuZCBlcnJvcgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gZGVmYXVsdCBvcGVyYW5kIGVycm9yIHJlc3VsdAkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlBbiBub25zaWduYWxsaW5nIE5BTiBpcyByZXR1cm5lZCBhcyB0aGUgZGVmYXVsdCByZXN1bHQgd2hlbgkjCiMgYW4gb3BlcmFuZCBlcnJvciBvY2N1cnMgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CQkJIwojCQkJCQkJCQkJIwojCU11bHRpcGx5OiAoSW5maW5pdHkgeCBaZXJvKQkJCQkJIwojCURpdmlkZSAgOiAoWmVybyAvIFplcm8pIHx8IChJbmZpbml0eSAvIEluZmluaXR5KQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlyZXNfb3BlcnIKcmVzX29wZXJyOgoJb3IubAkJJm5hbl9tYXNrK29wZXJyX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KQoJZm1vdm0ueAkJbmFuX3JldHVybiglcGMpLCAmMHg4MAoJcnRzCgpuYW5fcmV0dXJuOgoJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Rlbm9ybSgpOiBkZW5vcm1hbGl6ZSBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0CQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJYTAgPSBwb2ludHMgdG8gdGhlIG9wZXJhbmQgdG8gYmUgZGVub3JtYWxpemVkCQkJIwojCQkoaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkJCQkjCiMJCQkJCQkJCQkjCiMJZDAgPSByb3VuZGluZyBwcmVjaXNpb24JCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gdGhlIGRlbm9ybWFsaXplZCByZXN1bHQJCQkJIwojCQkoaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkJCQkjCiMJCQkJCQkJCQkjCiMJZDAgPSBndWFyZCxyb3VuZCxzdGlja3kJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlBY2NvcmRpbmcgdG8gdGhlIGV4cG9uZW50IHVuZGVyZmxvdyB0aHJlc2hvbGQgZm9yIHRoZSBnaXZlbgkjCiMgcHJlY2lzaW9uLCBzaGlmdCB0aGUgbWFudGlzc2EgYml0cyB0byB0aGUgcmlnaHQgaW4gb3JkZXIgcmFpc2UgdGhlCSMKIyBleHBvbmVudCBvZiB0aGUgb3BlcmFuZCB0byB0aGUgdGhyZXNob2xkIHZhbHVlLiBXaGlsZSBzaGlmdGluZyB0aGUJIwojIG1hbnRpc3NhIGJpdHMgcmlnaHQsIG1haW50YWluIHRoZSB2YWx1ZSBvZiB0aGUgZ3VhcmQsIHJvdW5kLCBhbmQJIwojIHN0aWNreSBiaXRzLgkJCQkJCQkJIwojIG90aGVyIG5vdGVzOgkJCQkJCQkJIwojCSgxKSBfZGVub3JtKCkgaXMgY2FsbGVkIGJ5IHRoZSB1bmRlcmZsb3cgcm91dGluZXMJCSMKIwkoMikgX2Rlbm9ybSgpIGRvZXMgTk9UIGFmZmVjdCB0aGUgc3RhdHVzIHJlZ2lzdGVyCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0YWJsZSBvZiBleHBvbmVudCB0aHJlc2hvbGQgdmFsdWVzIGZvciBlYWNoIHByZWNpc2lvbgojCnRibF90aHJlc2g6CglzaG9ydAkJMHgwCglzaG9ydAkJc2dsX3RocmVzaAoJc2hvcnQJCWRibF90aHJlc2gKCglnbG9iYWwJCV9kZW5vcm0KX2Rlbm9ybToKIwojIExvYWQgdGhlIGV4cG9uZW50IHRocmVzaG9sZCBmb3IgdGhlIHByZWNpc2lvbiBzZWxlY3RlZCBhbmQgY2hlY2sKIyB0byBzZWUgaWYgKHRocmVzaG9sZCAtIGV4cG9uZW50KSBpcyA+IDY1IGluIHdoaWNoIGNhc2Ugd2UgY2FuCiMgc2ltcGx5IGNhbGN1bGF0ZSB0aGUgc3RpY2t5IGJpdCBhbmQgemVybyB0aGUgbWFudGlzc2EuIG90aGVyd2lzZQojIHdlIGhhdmUgdG8gY2FsbCB0aGUgZGVub3JtYWxpemF0aW9uIHJvdXRpbmUuCiMKCWxzci5iCQkmMHgyLCAlZDAJCSMgc2hpZnQgcHJlYyB0byBsbyBiaXRzCgltb3YudwkJKHRibF90aHJlc2guYiwlcGMsJWQwLncqMiksICVkMSAjIGxvYWQgcHJlYyB0aHJlc2hvbGQKCW1vdi53CQklZDEsICVkMAkJIyBjb3B5IGQxIGludG8gZDAKCXN1Yi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBkaWZmID0gdGhyZXNob2xkIC0gZXhwCgljbXBpLncJCSVkMCwgJjY2CQkjIGlzIGRpZmYgPiA2NT8gKG1hbnQgKyBnLHIgYml0cykKCWJwbC5iCQlkZW5vcm1fc2V0X3N0a3kJCSMgeWVzOyBqdXN0IGNhbGMgc3RpY2t5CgoJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZyxyLHMKCWJ0c3QJCSZpbmV4Ml9iaXQsIEZQU1JfRVhDRVBUKCVhNikgIyB5ZXM7IHdhcyBJTkVYMiBzZXQ/CgliZXEuYgkJZGVub3JtX2NhbGwJCSMgbm87IGRvbid0IGNoYW5nZSBhbnl0aGluZwoJYnNldAkJJjI5LCAlZDAJCSMgeWVzOyBzZXQgc3RpY2t5IGJpdAoKZGVub3JtX2NhbGw6Cglic3IubAkJZG5ybV9scAkJCSMgZGVub3JtYWxpemUgdGhlIG51bWJlcgoJcnRzCgojCiMgYWxsIGJpdCB3b3VsZCBoYXZlIGJlZW4gc2hpZnRlZCBvZmYgZHVyaW5nIHRoZSBkZW5vcm0gc28gc2ltcGx5CiMgY2FsY3VsYXRlIGlmIHRoZSBzdGlja3kgc2hvdWxkIGJlIHNldCBhbmQgY2xlYXIgdGhlIGVudGlyZSBtYW50aXNzYS4KIwpkZW5vcm1fc2V0X3N0a3k6Cgltb3YubAkJJjB4MjAwMDAwMDAsICVkMAkjIHNldCBzdGlja3kgYml0IGluIHJldHVybiB2YWx1ZQoJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGxvYWQgZXhwIHdpdGggdGhyZXNob2xkCgljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBzZXQgZDEgPSAwIChtcyBtYW50aXNzYSkKCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIHNldCBkMiA9IDAgKG1zIG1hbnRpc3NhKQoJcnRzCgojCQkJCQkJCQkJIwojIGRucm1fbHAoKTogbm9ybWFsaXplIGV4cG9uZW50L21hbnRpc3NhIHRvIHNwZWNpZmllZCB0aHJlc2hob2xkCSMKIwkJCQkJCQkJCSMKIyBJTlBVVDoJCQkJCQkJCSMKIwklYTAJICAgOiBwb2ludHMgdG8gdGhlIG9wZXJhbmQgdG8gYmUgZGVub3JtYWxpemVkCQkjCiMJJWQwezMxOjI5fSA6IGluaXRpYWwgZ3VhcmQscm91bmQsc3RpY2t5CQkJCSMKIwklZDF7MTU6MH0gIDogZGVub3JtYWxpemF0aW9uIHRocmVzaG9sZAkJCQkjCiMgT1VUUFVUOgkJCQkJCQkJIwojCSVhMAkgICA6IHBvaW50cyB0byB0aGUgZGVub3JtYWxpemVkIG9wZXJhbmQJCQkjCiMJJWQwezMxOjI5fSA6IGZpbmFsIGd1YXJkLHJvdW5kLHN0aWNreQkJCQkjCiMJCQkJCQkJCQkjCgojICoqKiBMb2NhbCBFcXVhdGVzICoqKiAjCnNldAlHUlMsCQlMX1NDUjIJCQkjIGcscixzIHRlbXAgc3RvcmFnZQpzZXQJRlRFTVBfTE8yLAlMX1NDUjEJCQkjIEZURU1QX0xPIGNvcHkKCglnbG9iYWwJCWRucm1fbHAKZG5ybV9scDoKCiMKIyBtYWtlIGEgY29weSBvZiBGVEVNUF9MTyBhbmQgcGxhY2UgdGhlIGcscixzIGJpdHMgZGlyZWN0bHkgYWZ0ZXIgaXQKIyBpbiBtZW1vcnkgc28gYXMgdG8gbWFrZSB0aGUgYml0ZmllbGQgZXh0cmFjdGlvbiBmb3IgZGVub3JtYWxpemF0aW9uIGVhc2llci4KIwoJbW92LmwJCUZURU1QX0xPKCVhMCksIEZURU1QX0xPMiglYTYpICMgbWFrZSBGVEVNUF9MTyBjb3B5Cgltb3YubAkJJWQwLCBHUlMoJWE2KQkJIyBwbGFjZSBnLHIscyBhZnRlciBpdAoKIwojIGNoZWNrIHRvIHNlZSBob3cgbXVjaCBsZXNzIHRoYW4gdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQgdGhlIG9wZXJhbmQKIyBleHBvbmVudCBpcy4KIwoJbW92LmwJCSVkMSwgJWQwCQkjIGNvcHkgdGhlIGRlbm9ybSB0aHJlc2hvbGQKCXN1Yi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBkMSA9IHRocmVzaG9sZCAtIHVucyBleHBvbmVudAoJYmxlLmIJCWRucm1fbm9fbHAJCSMgZDEgPD0gMAoJY21waS53CQklZDEsICYweDIwCQkjIGlzICggMCA8PSBkMSA8IDMyKSA/CglibHQuYgkJY2FzZV8xCQkJIyB5ZXMKCWNtcGkudwkJJWQxLCAmMHg0MAkJIyBpcyAoMzIgPD0gZDEgPCA2NCkgPwoJYmx0LmIJCWNhc2VfMgkJCSMgeWVzCglicmEudwkJY2FzZV8zCQkJIyAoZDEgPj0gNjQpCgojCiMgTm8gbm9ybWFsaXphdGlvbiBuZWNlc3NhcnkKIwpkbnJtX25vX2xwOgoJbW92LmwJCUdSUyglYTYpLCAlZDAJCSMgcmVzdG9yZSBvcmlnaW5hbCBnLHIscwoJcnRzCgojCiMgY2FzZSAoMDxkMTwzMikKIwojICVkMCA9IGRlbm9ybSB0aHJlc2hvbGQKIyAlZDEgPSAibiIgPSBhbXQgdG8gc2hpZnQKIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwk8LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT4KIwlcCSAgIFwJCSAgICAgIFwJCQkgXAojCSBcCSAgICBcCQkgICAgICAgXAkJICBcCiMJICBcCSAgICAgXAkJCVwJCSAgIFwKIwkgICBcCSAgICAgIFwJCQkgXAkJICAgIFwKIwkgICAgXAkgICAgICAgXAkJICBcCQkgICAgIFwKIwkgICAgIFwJCVwJCSAgIFwJCSAgICAgIFwKIwkgICAgICBcCQkgXAkJICAgIFwJCSAgICAgICBcCiMJICAgICAgIFwJICBcCQkgICAgIFwJCQlcCiMJPC0obiktPjwtKDMyIC0gbiktPjwtLS0tLS0oMzIpLS0tLS0tLT48LS0tLS0tKDMyKS0tLS0tLS0+CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJfDAuLi4uLjB8IE5FV19ISSAgfCAgTkVXX0ZURU1QX0xPICAgICB8Z3JzCQl8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKY2FzZV8xOgoJbW92LmwJCSVkMiwgLSglc3ApCQkjIGNyZWF0ZSB0ZW1wIHN0b3JhZ2UKCgltb3YudwkJJWQwLCBGVEVNUF9FWCglYTApCSMgZXhwb25lbnQgPSBkZW5vcm0gdGhyZXNob2xkCgltb3YubAkJJjMyLCAlZDAKCXN1Yi53CQklZDEsICVkMAkJIyAlZDAgPSAzMiAtICVkMQoKCWNtcGkudwkJJWQxLCAmMjkJCSMgaXMgc2hmdCBhbXQgPj0gMjkKCWJsdC5iCQljYXNlMV9leHRyYWN0CQkjIG5vOyBubyBmaXggbmVlZGVkCgltb3YuYgkJR1JTKCVhNiksICVkMgoJb3IuYgkJJWQyLCAzK0ZURU1QX0xPMiglYTYpCgpjYXNlMV9leHRyYWN0OgoJYmZleHR1CQlGVEVNUF9ISSglYTApeyYwOiVkMH0sICVkMiAjICVkMiA9IG5ldyBGVEVNUF9ISQoJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMDomMzJ9LCAlZDEgIyAlZDEgPSBuZXcgRlRFTVBfTE8KCWJmZXh0dQkJRlRFTVBfTE8yKCVhNil7JWQwOiYzMn0sICVkMCAjICVkMCA9IG5ldyBHLFIsUwoKCW1vdi5sCQklZDIsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgRlRFTVBfSEkKCW1vdi5sCQklZDEsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBuZXcgRlRFTVBfTE8KCgliZnRzdAkJJWQweyYyOiYzMH0JCSMgd2VyZSBiaXRzIHNoaWZ0ZWQgb2ZmPwoJYmVxLmIJCWNhc2UxX3N0aWNreV9jbGVhcgkjIG5vOyBnbyBmaW5pc2gKCWJzZXQJCSZybmRfc3RreV9iaXQsICVkMAkjIHllczsgc2V0IHN0aWNreSBiaXQKCmNhc2UxX3N0aWNreV9jbGVhcjoKCWFuZC5sCQkmMHhlMDAwMDAwMCwgJWQwCSMgY2xlYXIgYWxsIGJ1dCBHLFIsUwoJbW92LmwJCSglc3ApKywgJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgoJcnRzCgojCiMgY2FzZSAoMzI8PWQxPDY0KQojCiMgJWQwID0gZGVub3JtIHRocmVzaG9sZAojICVkMSA9ICJuIiA9IGFtdCB0byBzaGlmdAojCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCTwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPgojCVwJICAgXAkJICAgICAgXAojCSBcCSAgICBcCQkgICAgICAgXAojCSAgXAkgICAgIFwJCQktLS0tLS0tLS0tLS0tLS0tLS0tCiMJICAgXAkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQkJICAgXAojCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCQkgIFwJCSAgICBcCiMJCQkgICAgICAgXAkgICBcCQkgICAgIFwKIwkJCQlcCSAgICBcCQkgICAgICBcCiMJCQkJIFwJICAgICBcCQkgICAgICAgXAojCTwtLS0tLS0tKDMyKS0tLS0tLT48LShuKS0+PC0oMzIgLSBuKS0+PC0tLS0tLSgzMiktLS0tLS0tPgojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwwLi4uLi4uLi4uLi4uLi4uMHwwLi4uLjB8IE5FV19MTyAgICAgfGdycwkJfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCmNhc2VfMjoKCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgdGVtcCBzdG9yYWdlCgoJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGV4cG9uZW50ID0gZGVub3JtIHRocmVzaG9sZAoJc3ViaS53CQkmMHgyMCwgJWQxCQkjICVkMSBub3cgYmV0d2VlbiAwIGFuZCAzMgoJbW92LmwJCSYweDIwLCAlZDAKCXN1Yi53CQklZDEsICVkMAkJIyAlZDAgPSAzMiAtICVkMQoKIyBzdWJ0bGUgc3RlcCBoZXJlOyBvciBpbiB0aGUgZyxyLHMgYXQgdGhlIGJvdHRvbSBvZiBGVEVNUF9MTyB0byBtaW5pbWl6ZQojIHRoZSBudW1iZXIgb2YgYml0cyB0byBjaGVjayBmb3IgdGhlIHN0aWNreSBkZXRlY3QuCiMgaXQgb25seSBwbGF5cyBhIHJvbGUgaW4gc2hpZnQgYW1vdW50cyBvZiA2MS02My4KCW1vdi5iCQlHUlMoJWE2KSwgJWQyCglvci5iCQklZDIsIDMrRlRFTVBfTE8yKCVhNikKCgliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjA6JWQwfSwgJWQyICMgJWQyID0gbmV3IEZURU1QX0xPCgliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQwOiYzMn0sICVkMSAjICVkMSA9IG5ldyBHLFIsUwoKCWJmdHN0CQklZDF7JjI6JjMwfQkJIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPwoJYm5lLmIJCWNhc2UyX3NldF9zdGlja3kJIyB5ZXM7IHNldCBzdGlja3kgYml0CgliZnRzdAkJRlRFTVBfTE8yKCVhNil7JWQwOiYzMX0JIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPwoJYm5lLmIJCWNhc2UyX3NldF9zdGlja3kJIyB5ZXM7IHNldCBzdGlja3kgYml0CgoJbW92LmwJCSVkMSwgJWQwCQkjIG1vdmUgbmV3IEcsUixTIHRvICVkMAoJYnJhLmIJCWNhc2UyX2VuZAoKY2FzZTJfc2V0X3N0aWNreToKCW1vdi5sCQklZDEsICVkMAkJIyBtb3ZlIG5ldyBHLFIsUyB0byAlZDAKCWJzZXQJCSZybmRfc3RreV9iaXQsICVkMAkjIHNldCBzdGlja3kgYml0CgpjYXNlMl9lbmQ6CgljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBzdG9yZSBGVEVNUF9ISSA9IDAKCW1vdi5sCQklZDIsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBGVEVNUF9MTwoJYW5kLmwJCSYweGUwMDAwMDAwLCAlZDAJIyBjbGVhciBhbGwgYnV0IEcsUixTCgoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSB0ZW1wIHJlZ2lzdGVyCglydHMKCiMKIyBjYXNlIChkMT49NjQpCiMKIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCiMgJWQxID0gYW10IHRvIHNoaWZ0CiMKY2FzZV8zOgoJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCBkZW5vcm0gdGhyZXNob2xkCgoJY21waS53CQklZDEsICY2NQkJIyBpcyBzaGlmdCBhbXQgPiA2NT8KCWJsdC5iCQljYXNlM182NAkJIyBubzsgaXQncyA9PSA2NAoJYmVxLmIJCWNhc2UzXzY1CQkjIG5vOyBpdCdzID09IDY1CgojCiMgY2FzZSAoZDE+NjUpCiMKIyBTaGlmdCB2YWx1ZSBpcyA+IDY1IGFuZCBvdXQgb2YgcmFuZ2UuIEFsbCBiaXRzIGFyZSBzaGlmdGVkIG9mZi4KIyBSZXR1cm4gYSB6ZXJvIG1hbnRpc3NhIHdpdGggdGhlIHN0aWNreSBiaXQgc2V0CiMKCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQoJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgbG8obWFudGlzc2EpCgltb3YubAkJJjB4MjAwMDAwMDAsICVkMAkjIHNldCBzdGlja3kgYml0CglydHMKCiMKIyBjYXNlIChkMSA9PSA2NCkKIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwk8LS0tLS0tLSgzMiktLS0tLS0+CiMJXAkJICAgXAojCSBcCQkgICAgXAojCSAgXAkJICAgICBcCiMJICAgXAkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgICBcCiMJCQkJCSAgIFwJCSAgICAgXAojCQkJCQkgICAgXAkJICAgICAgXAojCQkJCQkgICAgIFwJCSAgICAgICBcCiMJCQkJCSAgICAgIDwtLS0tLS0tKDMyKS0tLS0tLT4KIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4uLi4uLi4uLi4uLi4wfGdycwkJfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCmNhc2UzXzY0OgoJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGZldGNoIGhpKG1hbnRpc3NhKQoJbW92LmwJCSVkMCwgJWQxCQkjIG1ha2UgYSBjb3B5CglhbmQubAkJJjB4YzAwMDAwMDAsICVkMAkjIGV4dHJhY3QgRyxSCglhbmQubAkJJjB4M2ZmZmZmZmYsICVkMQkjIGV4dHJhY3Qgb3RoZXIgYml0cwoKCWJyYS5iCQljYXNlM19jb21wbGV0ZQoKIwojIGNhc2UgKGQxID09IDY1KQojCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCTwtLS0tLS0tKDMyKS0tLS0tLT4KIwlcCQkgICBcCiMJIFwJCSAgICBcCiMJICBcCQkgICAgIFwKIwkgICBcCQkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgICBcCiMJCQkJCSAgICBcCQkgICAgIFwKIwkJCQkJICAgICBcCQkgICAgICBcCiMJCQkJCSAgICAgIFwJCSAgICAgICBcCiMJCQkJCSAgICAgICA8LS0tLS0tLSgzMSktLS0tLT4KIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4uLi4uLi4uLi4uLi4wfDBycwkJfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCmNhc2UzXzY1OgoJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGZldGNoIGhpKG1hbnRpc3NhKQoJYW5kLmwJCSYweDgwMDAwMDAwLCAlZDAJIyBleHRyYWN0IFIgYml0Cglsc3IubAkJJjB4MSwgJWQwCQkjIHNoaWZ0IGhpZ2ggYml0IGludG8gUiBiaXQKCWFuZC5sCQkmMHg3ZmZmZmZmZiwgJWQxCSMgZXh0cmFjdCBvdGhlciBiaXRzCgpjYXNlM19jb21wbGV0ZToKIyBsYXN0IG9wZXJhdGlvbiBkb25lIHdhcyBhbiAiYW5kIiBvZiB0aGUgYml0cyBzaGlmdGVkIG9mZiBzbyB0aGUgY29uZGl0aW9uCiMgY29kZXMgYXJlIGFscmVhZHkgc2V0IHNvIGJyYW5jaCBhY2NvcmRpbmdseS4KCWJuZS5iCQljYXNlM19zZXRfc3RpY2t5CSMgeWVzOyBnbyBzZXQgbmV3IHN0aWNreQoJdHN0LmwJCUZURU1QX0xPKCVhMCkJCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KCWJuZS5iCQljYXNlM19zZXRfc3RpY2t5CSMgeWVzOyBnbyBzZXQgbmV3IHN0aWNreQoJdHN0LmIJCUdSUyglYTYpCQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CglibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKCiMKIyBubyBiaXRzIHdlcmUgc2hpZnRlZCBvZmYgc28gZG9uJ3Qgc2V0IHRoZSBzdGlja3kgYml0LgojIHRoZSBndWFyZCBhbmQKIyB0aGUgZW50aXJlIG1hbnRpc3NhIGlzIHplcm8uCiMKCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQoJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgbG8obWFudGlzc2EpCglydHMKCiMKIyBzb21lIGJpdHMgd2VyZSBzaGlmdGVkIG9mZiBzbyBzZXQgdGhlIHN0aWNreSBiaXQuCiMgdGhlIGVudGlyZSBtYW50aXNzYSBpcyB6ZXJvLgojCmNhc2UzX3NldF9zdGlja3k6Cglic2V0CQkmcm5kX3N0a3lfYml0LCVkMAkjIHNldCBuZXcgc3RpY2t5IGJpdAoJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgY2xlYXIgaGkobWFudGlzc2EpCgljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBsbyhtYW50aXNzYSkKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX3JvdW5kKCk6IHJvdW5kIHJlc3VsdCBhY2NvcmRpbmcgdG8gcHJlY2lzaW9uL21vZGUJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwCSAgPSBwdHIgdG8gaW5wdXQgb3BlcmFuZCBpbiBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQJIwojCWQxKGhpKSAgICA9IGNvbnRhaW5zIHJvdW5kaW5nIHByZWNpc2lvbjoJCQkjCiMJCQlleHQgPSAkMDAwMHh4eHgJCQkJCSMKIwkJCXNnbCA9ICQwMDA0eHh4eAkJCQkJIwojCQkJZGJsID0gJDAwMDh4eHh4CQkJCQkjCiMJZDEobG8pCSAgPSBjb250YWlucyByb3VuZGluZyBtb2RlOgkJCQkjCiMJCQlSTiAgPSAkeHh4eDAwMDAJCQkJCSMKIwkJCVJaICA9ICR4eHh4MDAwMQkJCQkJIwojCQkJUk0gID0gJHh4eHgwMDAyCQkJCQkjCiMJCQlSUCAgPSAkeHh4eDAwMDMJCQkJCSMKIwlkMHszMToyOX0gPSBjb250YWlucyB0aGUgZyxyLHMgYml0cyAoZXh0ZW5kZWQpCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIHJvdW5kZWQgcmVzdWx0CQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlPbiByZXR1cm4gdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgYTAgaXMgY29ycmVjdGx5IHJvdW5kZWQsCSMKIwlhMCBpcyBwcmVzZXJ2ZWQgYW5kIHRoZSBnLXItcyBiaXRzIGluIGQwIGFyZSBjbGVhcmVkLgkJIwojCVRoZSByZXN1bHQgaXMgbm90IHR5cGVkIC0gdGhlIHRhZyBmaWVsZCBpcyBpbnZhbGlkLiAgVGhlCSMKIwlyZXN1bHQgaXMgc3RpbGwgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdC4JCSMKIwkJCQkJCQkJCSMKIwlUaGUgSU5FWCBiaXQgb2YgVVNFUl9GUFNSIHdpbGwgYmUgc2V0IGlmIHRoZSByb3VuZGVkIHJlc3VsdCB3YXMJIwojCWluZXhhY3QgKGkuZS4gaWYgYW55IG9mIHRoZSBnLXItcyBiaXRzIHdlcmUgc2V0KS4JCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX3JvdW5kCl9yb3VuZDoKIwojIGV4dF9ncnMoKSBsb29rcyBhdCB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIGFuZCBzZXRzIHRoZSBhcHByb3ByaWF0ZQojIEcsUixTIGJpdHMuCiMgSWYgKEcsUixTID09IDApIHRoZW4gcmVzdWx0IGlzIGV4YWN0IGFuZCByb3VuZCBpcyBkb25lLCBlbHNlIHNldAojIHRoZSBpbmV4IGZsYWcgaW4gc3RhdHVzIHJlZyBhbmQgY29udGludWUuCiMKCWJzci5sCQlleHRfZ3JzCQkJIyBleHRyYWN0IEcsUixTCgoJdHN0LmwJCSVkMAkJCSMgYXJlIEcsUixTIHplcm8/CgliZXEudwkJdHJ1bmNhdGUJCSMgeWVzOyByb3VuZCBpcyBjb21wbGV0ZQoKCW9yLncJCSZpbngyYV9tYXNrLCAyK1VTRVJfRlBTUiglYTYpICMgc2V0IGluZXgyL2FpbmV4CgojCiMgVXNlIHJvdW5kaW5nIG1vZGUgYXMgYW4gaW5kZXggaW50byBhIGp1bXAgdGFibGUgZm9yIHRoZXNlIG1vZGVzLgojIEFsbCBvZiB0aGUgZm9sbG93aW5nIGFzc3VtZXMgZ3JzICE9IDAuCiMKCW1vdi53CQkodGJsX21vZGUuYiwlcGMsJWQxLncqMiksICVhMSAjIGxvYWQganVtcCBvZmZzZXQKCWptcAkJKHRibF9tb2RlLmIsJXBjLCVhMSkJIyBqbXAgdG8gcm5kIG1vZGUgaGFuZGxlcgoKdGJsX21vZGU6CglzaG9ydAkJcm5kX25lYXIgLSB0YmxfbW9kZQoJc2hvcnQJCXRydW5jYXRlIC0gdGJsX21vZGUJIyBSWiBhbHdheXMgdHJ1bmNhdGVzCglzaG9ydAkJcm5kX21udXMgLSB0YmxfbW9kZQoJc2hvcnQJCXJuZF9wbHVzIC0gdGJsX21vZGUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMJUk9VTkQgUExVUyBJTkZJTklUWQkJCQkJIwojCQkJCQkJCQkjCiMJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAwIChwb3NpdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4JIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpybmRfcGx1czoKCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBjaGVjayBmb3Igc2lnbgoJYm1pLncJCXRydW5jYXRlCQkjIGlmIHBvc2l0aXZlIHRoZW4gdHJ1bmNhdGUKCgltb3YubAkJJjB4ZmZmZmZmZmYsICVkMAkjIGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgoKCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CgliZXEudwkJYWRkX3NnbAkJCSMgeWVzCgliZ3QudwkJYWRkX2RibAkJCSMgbm87IGl0J3MgZGJsCglicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCVJPVU5EIE1JTlVTIElORklOSVRZCQkJCQkjCiMJCQkJCQkJCSMKIwlJZiBzaWduIG9mIGZwIG51bWJlciA9IDEgKG5lZ2F0aXZlKSwgdGhlbiBhZGQgMSB0byBsLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJuZF9tbnVzOgoJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGNoZWNrIGZvciBzaWduCglicGwudwkJdHJ1bmNhdGUJCSMgaWYgbmVnYXRpdmUgdGhlbiB0cnVuY2F0ZQoKCW1vdi5sCQkmMHhmZmZmZmZmZiwgJWQwCSMgZm9yY2UgZyxyLHMgdG8gYmUgYWxsIGYncwoJc3dhcAkJJWQxCQkJIyBzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCgoJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcHJlYyA9IHNnbD8KCWJlcS53CQlhZGRfc2dsCQkJIyB5ZXMKCWJndC53CQlhZGRfZGJsCQkJIyBubzsgaXQncyBkYmwKCWJyYS53CQlhZGRfZXh0CQkJIyBubzsgaXQncyBleHQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMJUk9VTkQgTkVBUkVTVAkJCQkJCSMKIwkJCQkJCQkJIwojCUlmIChnPTEpLCB0aGVuIGFkZCAxIHRvIGwgYW5kIGlmIChyPXM9MCksIHRoZW4gY2xlYXIgbAkjCiMJTm90ZSB0aGF0IHRoaXMgd2lsbCByb3VuZCB0byBldmVuIGluIGNhc2Ugb2YgYSB0aWUuCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcm5kX25lYXI6Cglhc2wubAkJJjB4MSwgJWQwCQkjIHNoaWZ0IGctYml0IHRvIGMtYml0CgliY2MudwkJdHJ1bmNhdGUJCSMgaWYgKGc9MSkgdGhlbgoKCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgoKCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CgliZXEudwkJYWRkX3NnbAkJCSMgeWVzCgliZ3QudwkJYWRkX2RibAkJCSMgbm87IGl0J3MgZGJsCglicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CgojICoqKiBMT0NBTCBFUVVBVEVTICoqKgpzZXQJYWRfMV9zZ2wsCTB4MDAwMDAxMDAJIyBjb25zdGFudCB0byBhZGQgMSB0byBsLWJpdCBpbiBzZ2wgcHJlYwpzZXQJYWRfMV9kYmwsCTB4MDAwMDA4MDAJIyBjb25zdGFudCB0byBhZGQgMSB0byBsLWJpdCBpbiBkYmwgcHJlYwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCUFERCBTSU5HTEUJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFkZF9zZ2w6CglhZGQubAkJJmFkXzFfc2dsLCBGVEVNUF9ISSglYTApCgliY2MuYgkJc2NjX2NscgkJCSMgbm8gbWFudGlzc2Egb3ZlcmZsb3cKCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBzaGlmdCB2LWJpdCBiYWNrIGluCglyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBzaGlmdCB2LWJpdCBiYWNrIGluCglhZGQudwkJJjB4MSwgRlRFTVBfRVgoJWEwKQkjIGFuZCBpbmNyIGV4cG9uZW50CnNjY19jbHI6Cgl0c3QubAkJJWQwCQkJIyB0ZXN0IGZvciBycyA9IDAKCWJuZS5iCQlzZ2xfZG9uZQoJYW5kLncJCSYweGZlMDAsIEZURU1QX0hJKzIoJWEwKSAjIGNsZWFyIHRoZSBsLWJpdApzZ2xfZG9uZToKCWFuZC5sCQkmMHhmZmZmZmYwMCwgRlRFTVBfSEkoJWEwKSAjIHRydW5jYXRlIGJpdHMgYmV5b25kIHNnbCBsaW1pdAoJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgZDIKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCUFERCBFWFRFTkRFRAkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKYWRkX2V4dDoKCWFkZHEubAkJJjEsRlRFTVBfTE8oJWEwKQkjIGFkZCAxIHRvIGwtYml0CgliY2MuYgkJeGNjX2NscgkJCSMgdGVzdCBmb3IgY2Fycnkgb3V0CglhZGRxLmwJCSYxLEZURU1QX0hJKCVhMCkJIyBwcm9wYWdhdGUgY2FycnkKCWJjYy5iCQl4Y2NfY2xyCglyb3hyLncJCUZURU1QX0hJKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKCXJveHIudwkJRlRFTVBfSEkrMiglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0Cglyb3hyLncJCUZURU1QX0xPKCVhMCkKCXJveHIudwkJRlRFTVBfTE8rMiglYTApCglhZGQudwkJJjB4MSxGVEVNUF9FWCglYTApCSMgYW5kIGluYyBleHAKeGNjX2NscjoKCXRzdC5sCQklZDAJCQkjIHRlc3QgcnMgPSAwCglibmUuYgkJYWRkX2V4dF9kb25lCglhbmQuYgkJJjB4ZmUsRlRFTVBfTE8rMyglYTApCSMgY2xlYXIgdGhlIGwgYml0CmFkZF9leHRfZG9uZToKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCUFERCBET1VCTEUJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFkZF9kYmw6CglhZGQubAkJJmFkXzFfZGJsLCBGVEVNUF9MTyglYTApICMgYWRkIDEgdG8gbHNiCgliY2MuYgkJZGNjX2NscgkJCSMgbm8gY2FycnkKCWFkZHEubAkJJjB4MSwgRlRFTVBfSEkoJWEwKQkjIHByb3BhZ2F0ZSBjYXJyeQoJYmNjLmIJCWRjY19jbHIJCQkjIG5vIGNhcnJ5CgoJcm94ci53CQlGVEVNUF9ISSglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0Cglyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAoJcm94ci53CQlGVEVNUF9MTyglYTApCglyb3hyLncJCUZURU1QX0xPKzIoJWEwKQoJYWRkcS53CQkmMHgxLCBGVEVNUF9FWCglYTApCSMgaW5jciBleHBvbmVudApkY2NfY2xyOgoJdHN0LmwJCSVkMAkJCSMgdGVzdCBmb3IgcnMgPSAwCglibmUuYgkJZGJsX2RvbmUKCWFuZC53CQkmMHhmMDAwLCBGVEVNUF9MTysyKCVhMCkgIyBjbGVhciB0aGUgbC1iaXQKCmRibF9kb25lOgoJYW5kLmwJCSYweGZmZmZmODAwLEZURU1QX0xPKCVhMCkgIyB0cnVuY2F0ZSBiaXRzIGJleW9uZCBkYmwgbGltaXQKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVHJ1bmNhdGUgYWxsIG90aGVyIGJpdHMgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKdHJ1bmNhdGU6Cglzd2FwCQklZDEJCQkjIHNlbGVjdCBybmQgcHJlYwoKCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgc2dsPwoJYmVxLncJCXNnbF9kb25lCQkjIHllcwoJYmd0LmIJCWRibF9kb25lCQkjIG5vOyBpdCdzIGRibAoJcnRzCQkJCQkjIG5vOyBpdCdzIGV4dAoKCiMKIyBleHRfZ3JzKCk6IGV4dHJhY3QgZ3VhcmQsIHJvdW5kIGFuZCBzdGlja3kgYml0cyBhY2NvcmRpbmcgdG8KIwkgICAgIHJvdW5kaW5nIHByZWNpc2lvbi4KIwojIElOUFVUCiMJZDAJICAgPSBleHRlbmRlZCBwcmVjaXNpb24gZyxyLHMgKGluIGQwezMxOjI5fSkKIwlkMQkgICA9IHtQUkVDLFJPVU5EfQojIE9VVFBVVAojCWQwezMxOjI5fSAgPSBndWFyZCwgcm91bmQsIHN0aWNreQojCiMgVGhlIGV4dF9ncnMgZXh0cmFjdCB0aGUgZ3VhcmQvcm91bmQvc3RpY2t5IGJpdHMgYWNjb3JkaW5nIHRvIHRoZQojIHNlbGVjdGVkIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQgaXMgY2FsbGVkIGJ5IHRoZSByb3VuZCBzdWJyb3V0aW5lCiMgb25seS4gIEFsbCByZWdpc3RlcnMgZXhjZXB0IGQwIGFyZSBrZXB0IGludGFjdC4gZDAgYmVjb21lcyBhbgojIHVwZGF0ZWQgZ3VhcmQscm91bmQsc3RpY2t5IGluIGQwezMxOjI5fQojCiMgTm90ZXM6IHRoZSBleHRfZ3JzIHVzZXMgdGhlIHJvdW5kIFBSRUMsIGFuZCB0aGVyZWZvcmUgaGFzIHRvIHN3YXAgZDEKIwkgcHJpb3IgdG8gdXNhZ2UsIGFuZCBuZWVkcyB0byByZXN0b3JlIGQxIHRvIG9yaWdpbmFsLiB0aGlzCiMJIHJvdXRpbmUgaXMgdGlnaHRseSB0aWVkIHRvIHRoZSByb3VuZCByb3V0aW5lIGFuZCBub3QgbWVhbnQgdG8KIwkgdXBob2xkIHN0YW5kYXJkIHN1YnJvdXRpbmUgY2FsbGluZyBwcmFjdGljZXMuCiMKCmV4dF9ncnM6Cglzd2FwCQklZDEJCQkjIGhhdmUgZDEudyBwb2ludCB0byByb3VuZCBwcmVjaXNpb24KCXRzdC5iCQklZDEJCQkjIGlzIHJuZCBwcmVjID0gZXh0ZW5kZWQ/CglibmUuYgkJZXh0X2dyc19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAoKIwojICVkMCBhY3R1YWxseSBhbHJlYWR5IGhvbGQgZyxyLHMgc2luY2UgX3JvdW5kKCkgaGFkIGl0IGJlZm9yZSBjYWxsaW5nCiMgdGhpcyBmdW5jdGlvbi4gc28sIGFzIGxvbmcgYXMgd2UgZG9uJ3QgZGlzdHVyYiBpdCwgd2UgYXJlICJyZXR1cm5pbmciIGl0LgojCmV4dF9ncnNfZXh0OgoJc3dhcAkJJWQxCQkJIyB5ZXM7IHJldHVybiB0byBjb3JyZWN0IHBvc2l0aW9ucwoJcnRzCgpleHRfZ3JzX25vdF9leHQ6Cgltb3ZtLmwJCSYweDMwMDAsIC0oJXNwKQkJIyBtYWtlIHNvbWUgdGVtcCByZWdpc3RlcnMge2QyL2QzfQoKCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHJuZCBwcmVjID0gc2dsPwoJYm5lLmIJCWV4dF9ncnNfZGJsCQkjIG5vOyBnbyBoYW5kbGUgZGJsCgojCiMgc2dsOgojCTk2CQk2NAkgIDQwCTMyCQkwCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8IEVYUAl8WFhYWFhYWHwJICB8eHgJfAkJfGdyc3wKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCQkJPC0tKDI0KS0tLT5ublwJCQkgICAvCiMJCQkJICAgZWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJCQkJICAgd3cJCXwKIwkJCQkJCXYKIwkJCQkgICBncgkgICBuZXcgc3RpY2t5CiMKZXh0X2dyc19zZ2w6CgliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjI0OiYyfSwgJWQzICMgc2dsIHByZWMuIGctciBhcmUgMiBiaXRzIHJpZ2h0Cgltb3YubAkJJjMwLCAlZDIJCSMgb2YgdGhlIHNnbCBwcmVjLiBsaW1pdHMKCWxzbC5sCQklZDIsICVkMwkJIyBzaGlmdCBnLXIgYml0cyB0byBNU0Igb2YgZDMKCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDIJIyBnZXQgd29yZCAyIGZvciBzLWJpdCB0ZXN0CglhbmQubAkJJjB4MDAwMDAwM2YsICVkMgkjIHMgYml0IGlzIHRoZSBvciBvZiBhbGwgb3RoZXIKCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgYml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCgl0c3QubAkJRlRFTVBfTE8oJWEwKQkJIyB0ZXN0IGxvd2VyIG1hbnRpc3NhCglibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5Cgl0c3QubAkJJWQwCQkJIyB0ZXN0IG9yaWdpbmFsIGcscixzCglibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5CglicmEuYgkJZXh0X2dyc19lbmRfc2QJCSMgaWYgd29yZHMgMyBhbmQgNCBhcmUgY2xyLCBleGl0CgojCiMgZGJsOgojCTk2CQk2NAkJMzIJIDExCTAKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgRVhQCXxYWFhYWFhYfAkJfAkgfHh4CXxncnN8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwkJCQkJCSAgbm5cCSAgICAvCiMJCQkJCQkgIGVlIC0tLS0tLS0KIwkJCQkJCSAgd3cJfAojCQkJCQkJCXYKIwkJCQkJCSAgZ3IJbmV3IHN0aWNreQojCmV4dF9ncnNfZGJsOgoJYmZleHR1CQlGVEVNUF9MTyglYTApeyYyMTomMn0sICVkMyAjIGRibC1wcmVjLiBnLXIgYXJlIDIgYml0cyByaWdodAoJbW92LmwJCSYzMCwgJWQyCQkjIG9mIHRoZSBkYmwgcHJlYy4gbGltaXRzCglsc2wubAkJJWQyLCAlZDMJCSMgc2hpZnQgZy1yIGJpdHMgdG8gdGhlIE1TQiBvZiBkMwoJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMgkjIGdldCBsb3dlciBtYW50aXNzYSAgZm9yIHMtYml0IHRlc3QKCWFuZC5sCQkmMHgwMDAwMDFmZiwgJWQyCSMgcyBiaXQgaXMgdGhlIG9yLWluZyBvZiBhbGwKCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgb3RoZXIgYml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCgl0c3QubAkJJWQwCQkJIyB0ZXN0IHdvcmQgb3JpZ2luYWwgZyxyLHMKCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgaWYgYW55IGFyZSBzZXQsIHNldCBzdGlja3kKCWJyYS5iCQlleHRfZ3JzX2VuZF9zZAkJIyBpZiBjbGVhciwgZXhpdAoKZXh0X2dyc19zdF9zdGt5OgoJYnNldAkJJnJuZF9zdGt5X2JpdCwgJWQzCSMgc2V0IHN0aWNreSBiaXQKZXh0X2dyc19lbmRfc2Q6Cgltb3YubAkJJWQzLCAlZDAJCSMgcmV0dXJuIGdycyB0byBkMAoKCW1vdm0ubAkJKCVzcCkrLCAmMHhjCQkjIHJlc3RvcmUgc2NyYXRjaCByZWdpc3RlcnMge2QyL2QzfQoKCXN3YXAJCSVkMQkJCSMgcmVzdG9yZSBkMSB0byBvcmlnaW5hbAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbm9ybSgpOiBub3JtYWxpemUgdGhlIG1hbnRpc3NhIG9mIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dC4gdGhlCSMKIwkgIGlucHV0IG9wZXJhbmQgc2hvdWxkIG5vdCBiZSBub3JtYWxpemVkIGFscmVhZHkuCQkjCiMJCQkJCQkJCQkjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub3JtKCkJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCW5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciBmcCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBub3JtYWxpemUJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWQwID0gbnVtYmVyIG9mIGJpdCBwb3NpdGlvbnMgdGhlIG1hbnRpc3NhIHdhcyBzaGlmdGVkCQkjCiMJYTAgPSB0aGUgaW5wdXQgb3BlcmFuZCdzIG1hbnRpc3NhIGlzIG5vcm1hbGl6ZWQ7IHRoZSBleHBvbmVudAkjCiMJICAgICBpcyB1bmNoYW5nZWQuCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCW5vcm0Kbm9ybToKCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgc29tZSB0ZW1wIHJlZ3MKCW1vdi5sCQklZDMsIC0oJXNwKQoKCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBsb2FkIGhpKG1hbnRpc3NhKQoJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMQkjIGxvYWQgbG8obWFudGlzc2EpCgoJYmZmZm8JCSVkMHsmMDomMzJ9LCAlZDIJIyBob3cgbWFueSBwbGFjZXMgdG8gc2hpZnQ/CgliZXEuYgkJbm9ybV9sbwkJCSMgaGkobWFuKSBpcyBhbGwgemVyb2VzIQoKbm9ybV9oaToKCWxzbC5sCQklZDIsICVkMAkJIyBsZWZ0IHNoaWZ0IGhpKG1hbikKCWJmZXh0dQkJJWQxeyYwOiVkMn0sICVkMwkjIGV4dHJhY3QgbG8gYml0cwoKCW9yLmwJCSVkMywgJWQwCQkjIGNyZWF0ZSBoaShtYW4pCglsc2wubAkJJWQyLCAlZDEJCSMgY3JlYXRlIGxvKG1hbikKCgltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IGhpKG1hbikKCW1vdi5sCQklZDEsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBuZXcgbG8obWFuKQoKCW1vdi5sCQklZDIsICVkMAkJIyByZXR1cm4gc2hpZnQgYW1vdW50CgoJbW92LmwJCSglc3ApKywgJWQzCQkjIHJlc3RvcmUgdGVtcCByZWdzCgltb3YubAkJKCVzcCkrLCAlZDIKCglydHMKCm5vcm1fbG86CgliZmZmbwkJJWQxeyYwOiYzMn0sICVkMgkjIGhvdyBtYW55IHBsYWNlcyB0byBzaGlmdD8KCWxzbC5sCQklZDIsICVkMQkJIyBzaGlmdCBsbyhtYW4pCglhZGQubAkJJjMyLCAlZDIJCSMgYWRkIDMyIHRvIHNoZnQgYW1vdW50CgoJbW92LmwJCSVkMSwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIGhpKG1hbikKCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGxvKG1hbikgaXMgbm93IHplcm8KCgltb3YubAkJJWQyLCAlZDAJCSMgcmV0dXJuIHNoaWZ0IGFtb3VudAoKCW1vdi5sCQkoJXNwKSssICVkMwkJIyByZXN0b3JlIHRlbXAgcmVncwoJbW92LmwJCSglc3ApKywgJWQyCgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgdW5ub3JtX2ZpeCgpOiAtIGNoYW5nZXMgYW4gVU5OT1JNIHRvIG9uZSBvZiBOT1JNLCBERU5PUk0sIG9yIFpFUk8JIwojCQktIHJldHVybnMgY29ycmVzcG9uZGluZyBvcHR5cGUgdGFnCQkJIwojCQkJCQkJCQkJIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJdW5ub3JtX2ZpeCgpCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byB1bm5vcm1hbGl6ZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlcgkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJZDAgPSBvcHR5cGUgdGFnIC0gaXMgY29ycmVjdGVkIHRvIG9uZSBvZiBOT1JNLCBERU5PUk0sIG9yIFpFUk8JIwojCWEwID0gaW5wdXQgb3BlcmFuZCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gYSBub3JtLCBkZW5vcm0sIG9yCSMKIwkgICAgIHplcm87IGJvdGggdGhlIGV4cG9uZW50IGFuZCBtYW50aXNzYSBhcmUgY2hhbmdlZC4JCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJdW5ub3JtX2ZpeAp1bm5vcm1fZml4OgoJYmZmZm8JCUZURU1QX0hJKCVhMCl7JjA6JjMyfSwgJWQwICMgaG93IG1hbnkgc2hpZnRzIGFyZSBuZWVkZWQ/CglibmUuYgkJdW5ub3JtX3NoaWZ0CQkjIGhpKG1hbikgaXMgbm90IGFsbCB6ZXJvZXMKCiMKIyBoaShtYW4pIGlzIGFsbCB6ZXJvZXMgc28gc2VlIGlmIGFueSBiaXRzIGluIGxvKG1hbikgYXJlIHNldAojCnVubm9ybV9jaGtfbG86CgliZmZmbwkJRlRFTVBfTE8oJWEwKXsmMDomMzJ9LCAlZDAgIyBpcyBvcGVyYW5kIHJlYWxseSBhIHplcm8/CgliZXEudwkJdW5ub3JtX3plcm8JCSMgeWVzCgoJYWRkLncJCSYzMiwgJWQwCQkjIG5vOyBmaXggc2hpZnQgZGlzdGFuY2UKCiMKIyBkMCA9ICMgc2hpZnRzIG5lZWRlZCBmb3IgY29tcGxldGUgbm9ybWFsaXphdGlvbgojCnVubm9ybV9zaGlmdDoKCWNsci5sCQklZDEJCQkjIGNsZWFyIHRvcCB3b3JkCgltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZXh0cmFjdCBleHBvbmVudAoJYW5kLncJCSYweDdmZmYsICVkMQkJIyBzdHJpcCBvZmYgc2duCgoJY21wLncJCSVkMCwgJWQxCQkjIHdpbGwgZGVub3JtIHB1c2ggZXhwIDwgMD8KCWJndC5iCQl1bm5vcm1fbnJtX3plcm8JCSMgeWVzOyBkZW5vcm0gb25seSB1bnRpbCBleHAgPSAwCgojCiMgZXhwb25lbnQgd291bGQgbm90IGdvIDwgMC4gdGhlcmVmb3JlLCBudW1iZXIgc3RheXMgbm9ybWFsaXplZAojCglzdWIudwkJJWQwLCAlZDEJCSMgc2hpZnQgZXhwb25lbnQgdmFsdWUKCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBsb2FkIG9sZCBleHBvbmVudAoJYW5kLncJCSYweDgwMDAsICVkMAkJIyBzYXZlIG9sZCBzaWduCglvci53CQklZDAsICVkMQkJIyB7c2duLG5ldyBleHB9Cgltb3YudwkJJWQxLCBGVEVNUF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgVU5OT1JNCgoJbW92LmIJCSZOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCglydHMKCiMKIyBleHBvbmVudCB3b3VsZCBnbyA8IDAsIHNvIG9ubHkgZGVub3JtYWxpemUgdW50aWwgZXhwID0gMAojCnVubm9ybV9ucm1femVybzoKCWNtcC5iCQklZDEsICYzMgkJIyBpcyBleHAgPD0gMzI/CgliZ3QuYgkJdW5ub3JtX25ybV96ZXJvX2xyZwkjIG5vOyBnbyBoYW5kbGUgbGFyZ2UgZXhwb25lbnQKCgliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQxOiYzMn0sICVkMCAjIGV4dHJhY3QgbmV3IGhpKG1hbikKCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzYXZlIG5ldyBoaShtYW4pCgoJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMAkjIGZldGNoIG9sZCBsbyhtYW4pCglsc2wubAkJJWQxLCAlZDAJCSMgZXh0cmFjdCBuZXcgbG8obWFuKQoJbW92LmwJCSVkMCwgRlRFTVBfTE8oJWEwKQkjIHNhdmUgbmV3IGxvKG1hbikKCglhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIHNldCBleHAgPSAwCgoJbW92LmIJCSZERU5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKCXJ0cwoKIwojIG9ubHkgbWFudGlzc2EgYml0cyBzZXQgYXJlIGluIGxvKG1hbikKIwp1bm5vcm1fbnJtX3plcm9fbHJnOgoJc3ViLncJCSYzMiwgJWQxCQkjIGFkanVzdCBzaGZ0IGFtdCBieSAzMgoKCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDAJIyBmZXRjaCBvbGQgbG8obWFuKQoJbHNsLmwJCSVkMSwgJWQwCQkjIGxlZnQgc2hpZnQgbG8obWFuKQoKCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgaGkobWFuKQoJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgbG8obWFuKSA9IDAKCglhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIHNldCBleHAgPSAwCgoJbW92LmIJCSZERU5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKCXJ0cwoKIwojIHdob2xlIG1hbnRpc3NhIGlzIHplcm8gc28gdGhpcyBVTk5PUk0gaXMgYWN0dWFsbHkgYSB6ZXJvCiMKdW5ub3JtX3plcm86CglhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIGZvcmNlIGV4cG9uZW50IHRvIHplcm8KCgltb3YuYgkJJlpFUk8sICVkMAkJIyBmaXggb3B0eXBlIHRhZwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzZXRfdGFnX3goKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IGV4dCBmcCBudW1iZXIJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgVU5OT1JNLCBaRVJPCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKIwlJZiBpdCdzIGFuIHVubm9ybWFsaXplZCB6ZXJvLCBhbHRlciB0aGUgb3BlcmFuZCBhbmQgZm9yY2UgaXQJIwojIHRvIGJlIGEgbm9ybWFsIHplcm8uCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc2V0X3RhZ194CnNldF90YWdfeDoKCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBleHRyYWN0IGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsICVkMAkJIyBzdHJpcCBvZmYgc2lnbgoJY21waS53CQklZDAsICYweDdmZmYJCSMgaXMgKEVYUCA9PSBNQVgpPwoJYmVxLmIJCWluZl9vcl9uYW5feApub3RfaW5mX29yX25hbl94OgoJYnRzdAkJJjB4NyxGVEVNUF9ISSglYTApCgliZXEuYgkJbm90X25vcm1feAppc19ub3JtX3g6Cgltb3YuYgkJJk5PUk0sICVkMAoJcnRzCm5vdF9ub3JtX3g6Cgl0c3QudwkJJWQwCQkJIyBpcyBleHBvbmVudCA9IDA/CglibmUuYgkJaXNfdW5ub3JtX3gKbm90X3Vubm9ybV94OgoJdHN0LmwJCUZURU1QX0hJKCVhMCkKCWJuZS5iCQlpc19kZW5vcm1feAoJdHN0LmwJCUZURU1QX0xPKCVhMCkKCWJuZS5iCQlpc19kZW5vcm1feAppc196ZXJvX3g6Cgltb3YuYgkJJlpFUk8sICVkMAoJcnRzCmlzX2Rlbm9ybV94OgoJbW92LmIJCSZERU5PUk0sICVkMAoJcnRzCiMgbXVzdCBkaXN0aW5ndWlzaCBub3cgIlVubm9ybWFsaXplZCB6ZXJvZXMiIHdoaWNoIHdlCiMgbXVzdCBjb252ZXJ0IHRvIHplcm8uCmlzX3Vubm9ybV94OgoJdHN0LmwJCUZURU1QX0hJKCVhMCkKCWJuZS5iCQlpc191bm5vcm1fcmVnX3gKCXRzdC5sCQlGVEVNUF9MTyglYTApCglibmUuYgkJaXNfdW5ub3JtX3JlZ194CiMgaXQncyBhbiAidW5ub3JtYWxpemVkIHplcm8iLiBsZXQncyBjb252ZXJ0IGl0IHRvIGFuIGFjdHVhbCB6ZXJvLi4uCglhbmRpLncJCSYweDgwMDAsRlRFTVBfRVgoJWEwKQkjIGNsZWFyIGV4cG9uZW50Cgltb3YuYgkJJlpFUk8sICVkMAoJcnRzCmlzX3Vubm9ybV9yZWdfeDoKCW1vdi5iCQkmVU5OT1JNLCAlZDAKCXJ0cwppbmZfb3JfbmFuX3g6Cgl0c3QubAkJRlRFTVBfTE8oJWEwKQoJYm5lLmIJCWlzX25hbl94Cgltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCglhbmQubAkJJjB4N2ZmZmZmZmYsICVkMAkjIG1zYiBpcyBhIGRvbid0IGNhcmUhCglibmUuYgkJaXNfbmFuX3gKaXNfaW5mX3g6Cgltb3YuYgkJJklORiwgJWQwCglydHMKaXNfbmFuX3g6CglidHN0CQkmMHg2LCBGVEVNUF9ISSglYTApCgliZXEuYgkJaXNfc25hbl94Cgltb3YuYgkJJlFOQU4sICVkMAoJcnRzCmlzX3NuYW5feDoKCW1vdi5iCQkmU05BTiwgJWQwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNldF90YWdfZCgpOiByZXR1cm4gdGhlIG9wdHlwZSBvZiB0aGUgaW5wdXQgZGJsIGZwIG51bWJlcgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50cyB0byBkb3VibGUgcHJlY2lzaW9uIG9wZXJhbmQJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgWkVSTwkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIwojIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzZXRfdGFnX2QKc2V0X3RhZ19kOgoJbW92LmwJCUZURU1QKCVhMCksICVkMAoJbW92LmwJCSVkMCwgJWQxCgoJYW5kaS5sCQkmMHg3ZmYwMDAwMCwgJWQwCgliZXEuYgkJemVyb19vcl9kZW5vcm1fZAoKCWNtcGkubAkJJWQwLCAmMHg3ZmYwMDAwMAoJYmVxLmIJCWluZl9vcl9uYW5fZAoKaXNfbm9ybV9kOgoJbW92LmIJCSZOT1JNLCAlZDAKCXJ0cwp6ZXJvX29yX2Rlbm9ybV9kOgoJYW5kLmwJCSYweDAwMGZmZmZmLCAlZDEKCWJuZQkJaXNfZGVub3JtX2QKCXRzdC5sCQk0K0ZURU1QKCVhMCkKCWJuZQkJaXNfZGVub3JtX2QKaXNfemVyb19kOgoJbW92LmIJCSZaRVJPLCAlZDAKCXJ0cwppc19kZW5vcm1fZDoKCW1vdi5iCQkmREVOT1JNLCAlZDAKCXJ0cwppbmZfb3JfbmFuX2Q6CglhbmQubAkJJjB4MDAwZmZmZmYsICVkMQoJYm5lCQlpc19uYW5fZAoJdHN0LmwJCTQrRlRFTVAoJWEwKQoJYm5lCQlpc19uYW5fZAppc19pbmZfZDoKCW1vdi5iCQkmSU5GLCAlZDAKCXJ0cwppc19uYW5fZDoKCWJ0c3QJCSYxOSwgJWQxCglibmUJCWlzX3FuYW5fZAppc19zbmFuX2Q6Cgltb3YuYgkJJlNOQU4sICVkMAoJcnRzCmlzX3FuYW5fZDoKCW1vdi5iCQkmUU5BTiwgJWQwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNldF90YWdfcygpOiByZXR1cm4gdGhlIG9wdHlwZSBvZiB0aGUgaW5wdXQgc2dsIGZwIG51bWJlcgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gc2luZ2xlIHByZWNpc2lvbiBvcGVyYW5kCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgWkVSTwkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIwojIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzZXRfdGFnX3MKc2V0X3RhZ19zOgoJbW92LmwJCUZURU1QKCVhMCksICVkMAoJbW92LmwJCSVkMCwgJWQxCgoJYW5kaS5sCQkmMHg3ZjgwMDAwMCwgJWQwCgliZXEuYgkJemVyb19vcl9kZW5vcm1fcwoKCWNtcGkubAkJJWQwLCAmMHg3ZjgwMDAwMAoJYmVxLmIJCWluZl9vcl9uYW5fcwoKaXNfbm9ybV9zOgoJbW92LmIJCSZOT1JNLCAlZDAKCXJ0cwp6ZXJvX29yX2Rlbm9ybV9zOgoJYW5kLmwJCSYweDAwN2ZmZmZmLCAlZDEKCWJuZQkJaXNfZGVub3JtX3MKaXNfemVyb19zOgoJbW92LmIJCSZaRVJPLCAlZDAKCXJ0cwppc19kZW5vcm1fczoKCW1vdi5iCQkmREVOT1JNLCAlZDAKCXJ0cwppbmZfb3JfbmFuX3M6CglhbmQubAkJJjB4MDA3ZmZmZmYsICVkMQoJYm5lCQlpc19uYW5fcwppc19pbmZfczoKCW1vdi5iCQkmSU5GLCAlZDAKCXJ0cwppc19uYW5fczoKCWJ0c3QJCSYyMiwgJWQxCglibmUJCWlzX3FuYW5fcwppc19zbmFuX3M6Cgltb3YuYgkJJlNOQU4sICVkMAoJcnRzCmlzX3FuYW5fczoKCW1vdi5iCQkmUU5BTiwgJWQwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXVuZl9yZXMoKTogcm91dGluZSB0byBwcm9kdWNlIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBvZiBhCSMKIwkJICAgc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXI7IHRoaXMgaXMgdXNlZCBieQkjCiMJCSAgIGZhZGQvZmRpdi9mbXVsL2V0Yy4gZW11bGF0aW9uIHJvdXRpbmVzLgkJIwojCXVuZl9yZXM0KCk6IHNhbWUgYXMgYWJvdmUgYnV0IGZvciBmc2dsbXVsL2ZzZ2xkaXYgd2hpY2ggdXNlCSMKIwkJICAgIHNpbmdsZSByb3VuZCBwcmVjIGFuZCBleHRlbmRlZCBwcmVjIG1vZGUuCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZGVub3JtKCkgLSBkZW5vcm1hbGl6ZSBhY2NvcmRpbmcgdG8gc2NhbGUgZmFjdG9yCQkjCiMJX3JvdW5kKCkgLSByb3VuZCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGFjY29yZGluZyB0byBybmQgcHJlYwkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzb24gb3BlcmFuZAkJCSMKIwlkMCA9IHNjYWxlIGZhY3RvcgkJCQkJCSMKIwlkMSA9IHJvdW5kaW5nIHByZWNpc2lvbi9tb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJZDAuYiA9IHJlc3VsdCBGUFNSX2NjIHdoaWNoIGNhbGxlciBtYXkgb3IgbWF5IG5vdCB3YW50IHRvIHNhdmUJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQ29udmVydCB0aGUgaW5wdXQgb3BlcmFuZCB0byAiaW50ZXJuYWwgZm9ybWF0IiB3aGljaCBtZWFucyB0aGUJIwojIGV4cG9uZW50IGlzIGV4dGVuZGVkIHRvIDE2IGJpdHMgYW5kIHRoZSBzaWduIGlzIHN0b3JlZCBpbiB0aGUgdW51c2VkCSMKIyBwb3J0aW9uIG9mIHRoZSBleHRlbmRlZCBwcmVjaXNvbiBvcGVyYW5kLiBEZW5vcm1hbGl6ZSB0aGUgbnVtYmVyCSMKIyBhY2NvcmRpbmcgdG8gdGhlIHNjYWxlIGZhY3RvciBwYXNzZWQgaW4gZDAuIFRoZW4sIHJvdW5kIHRoZQkJIwojIGRlbm9ybWFsaXplZCByZXN1bHQuCQkJCQkJCSMKIwlTZXQgdGhlIEZQU1JfZXhjIGJpdHMgYXMgYXBwcm9wcmlhdGUgYnV0IHJldHVybiB0aGUgY2MgYml0cyBpbgkjCiMgZDAgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXNuJ3Qgd2FudCB0byBzYXZlIHRoZW0gKGFzIGlzIHRoZSBjYXNlIGZvcgkjCiMgZm1vdmUgb3V0KS4JCQkJCQkJCSMKIwl1bmZfcmVzNCgpIGZvciBmc2dsbXVsL2ZzZ2xkaXYgZm9yY2VzIHRoZSBkZW5vcm0gdG8gZXh0ZW5kZWQJIwojIHByZWNpc2lvbiBhbmQgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2luZ2xlLgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJdW5mX3Jlcwp1bmZfcmVzOgoJbW92LmwJCSVkMSwgLSglc3ApCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjawoKCWJ0c3QJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBtYWtlICJpbnRlcm5hbCIgZm9ybWF0CglzbmUJCUZURU1QX1NHTiglYTApCgoJbW92LncJCUZURU1QX0VYKCVhMCksICVkMQkjIGV4dHJhY3QgZXhwb25lbnQKCWFuZC53CQkmMHg3ZmZmLCAlZDEKCXN1Yi53CQklZDAsICVkMQoJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCAxNiBiaXQgZXhwb25lbnQKCgltb3YubAkJJWEwLCAtKCVzcCkJCSMgc2F2ZSBvcGVyYW5kIHB0ciBkdXJpbmcgY2FsbHMKCgltb3YubAkJMHg0KCVzcCksJWQwCQkjIHBhc3Mgcm5kIHByZWMuCglhbmRpLncJCSYweDAwYzAsJWQwCglsc3IudwkJJjB4NCwlZDAKCWJzci5sCQlfZGVub3JtCQkJIyBkZW5vcm0gcmVzdWx0CgoJbW92LmwJCSglc3ApLCVhMAoJbW92LncJCTB4Niglc3ApLCVkMQkJIyBsb2FkIHByZWM6bW9kZSBpbnRvICVkMQoJYW5kaS53CQkmMHhjMCwlZDEJCSMgZXh0cmFjdCBybmQgcHJlYwoJbHNyLncJCSYweDQsJWQxCglzd2FwCQklZDEKCW1vdi53CQkweDYoJXNwKSwlZDEKCWFuZGkudwkJJjB4MzAsJWQxCglsc3IudwkJJjB4NCwlZDEKCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBkZW5vcm0KCgltb3YubAkJKCVzcCkrLCAlYTAKCiMgcmVzdWx0IGlzIG5vdyByb3VuZGVkIHByb3Blcmx5LiBjb252ZXJ0IGJhY2sgdG8gbm9ybWFsIGZvcm1hdAoJYmNscgkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIGNsZWFyIHNnbiBmaXJzdDsgbWF5IGhhdmUgcmVzaWR1ZQoJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGlzICJpbnRlcm5hbCByZXN1bHQiIHNpZ24gc2V0PwoJYmVxLmIJCXVuZl9yZXNfY2hraWZ6ZXJvCSMgbm87IHJlc3VsdCBpcyBwb3NpdGl2ZQoJYnNldAkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIHNldCByZXN1bHQgc2duCgljbHIuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2xlYXIgdGVtcCBzaWduCgojIHRoZSBudW1iZXIgbWF5IGhhdmUgYmVjb21lIHplcm8gYWZ0ZXIgcm91bmRpbmcuIHNldCBjY29kZXMgYWNjb3JkaW5nbHkuCnVuZl9yZXNfY2hraWZ6ZXJvOgoJY2xyLmwJCSVkMAoJdHN0LmwJCUZURU1QX0hJKCVhMCkJCSMgaXMgdmFsdWUgbm93IGEgemVybz8KCWJuZS5iCQl1bmZfcmVzX2NvbnQJCSMgbm8KCXRzdC5sCQlGVEVNUF9MTyglYTApCglibmUuYgkJdW5mX3Jlc19jb250CQkjIG5vCiMJYnNldAkJJnpfYml0LCBGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAoJYnNldAkJJnpfYml0LCAlZDAJCSMgeWVzOyBzZXQgemVybyBjY29kZSBiaXQKCnVuZl9yZXNfY29udDoKCiMKIyBjYW4gaW5leDEgYWxzbyBiZSBzZXQgYWxvbmcgd2l0aCB1bmZsIGFuZCBpbmV4Mj8/PwojCiMgd2Uga25vdyB0aGF0IHVuZGVyZmxvdyBoYXMgb2NjdXJyZWQuIGF1bmZsIHNob3VsZCBiZSBzZXQgaWYgSU5FWDIgaXMgYWxzbyBzZXQuCiMKCWJ0c3QJCSZpbmV4Ml9iaXQsIEZQU1JfRVhDRVBUKCVhNikgIyBpcyBJTkVYMiBzZXQ/CgliZXEuYgkJdW5mX3Jlc19lbmQJCSMgbm8KCWJzZXQJCSZhdW5mbF9iaXQsIEZQU1JfQUVYQ0VQVCglYTYpICMgeWVzOyBzZXQgYXVuZmwKCnVuZl9yZXNfZW5kOgoJYWRkLmwJCSYweDQsICVzcAkJIyBjbGVhciBzdGFjawoJcnRzCgojIHVuZl9yZXMoKSBmb3IgZnNnbG11bCgpIGFuZCBmc2dsZGl2KCkuCglnbG9iYWwJCXVuZl9yZXM0CnVuZl9yZXM0OgoJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCgoJYnRzdAkJJjB4NyxGVEVNUF9FWCglYTApCSMgbWFrZSAiaW50ZXJuYWwiIGZvcm1hdAoJc25lCQlGVEVNUF9TR04oJWEwKQoKCW1vdi53CQlGVEVNUF9FWCglYTApLCVkMQkjIGV4dHJhY3QgZXhwb25lbnQKCWFuZC53CQkmMHg3ZmZmLCVkMQoJc3ViLncJCSVkMCwlZDEKCW1vdi53CQklZDEsRlRFTVBfRVgoJWEwKQkjIGluc2VydCAxNiBiaXQgZXhwb25lbnQKCgltb3YubAkJJWEwLC0oJXNwKQkJIyBzYXZlIG9wZXJhbmQgcHRyIGR1cmluZyBjYWxscwoKCWNsci5sCQklZDAJCQkjIGZvcmNlIHJuZCBwcmVjID0gZXh0Cglic3IubAkJX2Rlbm9ybQkJCSMgZGVub3JtIHJlc3VsdAoKCW1vdi5sCQkoJXNwKSwlYTAKCW1vdi53CQkmc19tb2RlLCVkMQkJIyBmb3JjZSBybmQgcHJlYyA9IHNnbAoJc3dhcAkJJWQxCgltb3YudwkJMHg2KCVzcCksJWQxCQkjIGxvYWQgcm5kIG1vZGUKCWFuZGkudwkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIHByZWMKCWxzci53CQkmMHg0LCVkMQoJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIGRlbm9ybQoKCW1vdi5sCQkoJXNwKSssJWEwCgojIHJlc3VsdCBpcyBub3cgcm91bmRlZCBwcm9wZXJseS4gY29udmVydCBiYWNrIHRvIG5vcm1hbCBmb3JtYXQKCWJjbHIJCSYweDcsRlRFTVBfRVgoJWEwKQkjIGNsZWFyIHNnbiBmaXJzdDsgbWF5IGhhdmUgcmVzaWR1ZQoJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGlzICJpbnRlcm5hbCByZXN1bHQiIHNpZ24gc2V0PwoJYmVxLmIJCXVuZl9yZXM0X2Noa2lmemVybwkjIG5vOyByZXN1bHQgaXMgcG9zaXRpdmUKCWJzZXQJCSYweDcsRlRFTVBfRVgoJWEwKQkjIHNldCByZXN1bHQgc2duCgljbHIuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2xlYXIgdGVtcCBzaWduCgojIHRoZSBudW1iZXIgbWF5IGhhdmUgYmVjb21lIHplcm8gYWZ0ZXIgcm91bmRpbmcuIHNldCBjY29kZXMgYWNjb3JkaW5nbHkuCnVuZl9yZXM0X2Noa2lmemVybzoKCWNsci5sCQklZDAKCXRzdC5sCQlGVEVNUF9ISSglYTApCQkjIGlzIHZhbHVlIG5vdyBhIHplcm8/CglibmUuYgkJdW5mX3JlczRfY29udAkJIyBubwoJdHN0LmwJCUZURU1QX0xPKCVhMCkKCWJuZS5iCQl1bmZfcmVzNF9jb250CQkjIG5vCiMJYnNldAkJJnpfYml0LEZQU1JfQ0MoJWE2KQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0Cglic2V0CQkmel9iaXQsJWQwCQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0Cgp1bmZfcmVzNF9jb250OgoKIwojIGNhbiBpbmV4MSBhbHNvIGJlIHNldCBhbG9uZyB3aXRoIHVuZmwgYW5kIGluZXgyPz8/CiMKIyB3ZSBrbm93IHRoYXQgdW5kZXJmbG93IGhhcyBvY2N1cnJlZC4gYXVuZmwgc2hvdWxkIGJlIHNldCBpZiBJTkVYMiBpcyBhbHNvIHNldC4KIwoJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PwoJYmVxLmIJCXVuZl9yZXM0X2VuZAkJIyBubwoJYnNldAkJJmF1bmZsX2JpdCxGUFNSX0FFWENFUFQoJWE2KSAjIHllczsgc2V0IGF1bmZsCgp1bmZfcmVzNF9lbmQ6CglhZGQubAkJJjB4NCwlc3AJCSMgY2xlYXIgc3RhY2sKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJb3ZmX3JlcygpOiByb3V0aW5lIHRvIHByb2R1Y2UgdGhlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IG9mCSMKIwkJICAgYW4gb3ZlcmZsb3dpbmcgbnVtYmVyLgkJCQkjCiMJb3ZmX3JlczIoKTogc2FtZSBhcyBhYm92ZSBidXQgdGhlIHJuZCBtb2RlL3ByZWMgYXJlIHBhc3NlZAkjCiMJCSAgICBkaWZmZXJlbnRseS4JCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCW5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQxLmIJPSAnLTEnID0+ICgtKTsgJzAnID0+ICgrKQkJCQkjCiMgICBvdmZfcmVzKCk6CQkJCQkJCQkjCiMJZDAJPSBybmQgbW9kZS9wcmVjCQkJCQkJIwojICAgb3ZmX3JlczIoKToJCQkJCQkJCSMKIwloaShkMCkJPSBybmQgcHJlYwkJCQkJCSMKIwlsbyhkMCkJPSBybmQgbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwCT0gcG9pbnRzIHRvIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQJCQkjCiMJZDAuYgk9IGNvbmRpdGlvbiBjb2RlIGJpdHMJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoZSBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgc2lnbiBvZgkjCiMgdGhlIHJlc3VsdCBhbmQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYyBpbiBlZmZlY3QuIFRoZXNlIGJpdHMgYXJlCSMKIyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgdG8gY3JlYXRlIGFuIGluZGV4IGludG8gdGhlIGRlZmF1bHQgcmVzdWx0CSMKIyB0YWJsZS4gQSBwb2ludGVyIHRvIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyByZXR1cm5lZCBpbiBhMC4gVGhlCQkjCiMgcmVzdWx0aW5nIGNvbmRpdGlvbiBjb2RlcyBhcmUgcmV0dXJuZWQgaW4gZDAgaW4gY2FzZSB0aGUgY2FsbGVyCSMKIyBkb2Vzbid0IHdhbnQgRlBTUl9jYyBhbHRlcmVkIChhcyBpcyB0aGUgY2FzZSBmb3IgZm1vdmUgb3V0KS4JCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJb3ZmX3JlcwpvdmZfcmVzOgoJYW5kaS53CQkmMHgxMCwlZDEJCSMga2VlcCByZXN1bHQgc2lnbgoJbHNyLmIJCSYweDQsJWQwCQkjIHNoaWZ0IHByZWMvbW9kZQoJb3IuYgkJJWQwLCVkMQkJCSMgY29uY2F0IHRoZSB0d28KCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQoJbHNsLmIJCSYweDEsJWQxCQkjIG11bHRpcGx5IGQxIGJ5IDIKCWJyYS5iCQlvdmZfcmVzX2xvYWQKCglnbG9iYWwJCW92Zl9yZXMyCm92Zl9yZXMyOgoJYW5kLncJCSYweDEwLCAlZDEJCSMga2VlcCByZXN1bHQgc2lnbgoJb3IuYgkJJWQwLCAlZDEJCSMgaW5zZXJ0IHJuZCBtb2RlCglzd2FwCQklZDAKCW9yLmIJCSVkMCwgJWQxCQkjIGluc2VydCBybmQgcHJlYwoJbW92LncJCSVkMSwgJWQwCQkjIG1ha2UgYSBjb3B5Cglsc2wuYgkJJjB4MSwgJWQxCQkjIHNoaWZ0IGxlZnQgYnkgMQoKIwojIHVzZSB0aGUgcm91bmRpbmcgbW9kZSwgcHJlY2lzaW9uLCBhbmQgcmVzdWx0IHNpZ24gYXMgaW4gaW5kZXggaW50byB0aGUKIyB0d28gdGFibGVzIGJlbG93IHRvIGZldGNoIHRoZSBkZWZhdWx0IHJlc3VsdCBhbmQgdGhlIHJlc3VsdCBjY29kZXMuCiMKb3ZmX3Jlc19sb2FkOgoJbW92LmIJCSh0Ymxfb3ZmbF9jYy5iLCVwYywlZDAudyoxKSwgJWQwICMgZmV0Y2ggcmVzdWx0IGNjb2RlcwoJbGVhCQkodGJsX292ZmxfcmVzdWx0LmIsJXBjLCVkMS53KjgpLCAlYTAgIyByZXR1cm4gcmVzdWx0IHB0cgoKCXJ0cwoKdGJsX292ZmxfY2M6CglieXRlCQkweDIsIDB4MCwgMHgwLCAweDIKCWJ5dGUJCTB4MiwgMHgwLCAweDAsIDB4MgoJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCglieXRlCQkweDAsIDB4MCwgMHgwLCAweDAKCWJ5dGUJCTB4MisweDgsIDB4OCwgMHgyKzB4OCwgMHg4CglieXRlCQkweDIrMHg4LCAweDgsIDB4MisweDgsIDB4OAoJYnl0ZQkJMHgyKzB4OCwgMHg4LCAweDIrMHg4LCAweDgKCnRibF9vdmZsX3Jlc3VsdDoKCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgoJbG9uZwkJMHg3ZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjICtFWFQ7IFJaCglsb25nCQkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgK0VYVDsgUk0KCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAoKCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgoJbG9uZwkJMHg0MDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtTR0w7IFJaCglsb25nCQkweDQwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK1NHTDsgUk0KCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAoKCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgoJbG9uZwkJMHg0M2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjICtEQkw7IFJaCglsb25nCQkweDQzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgK0RCTDsgUk0KCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAoKCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKCglsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KCWxvbmcJCTB4ZmZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4MDAwMDAwMDAgIyAtRVhUOyBSWgoJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCglsb25nCQkweGZmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgLUVYVDsgUlAKCglsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KCWxvbmcJCTB4YzA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtU0dMOyBSWgoJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCglsb25nCQkweGMwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLVNHTDsgUlAKCglsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KCWxvbmcJCTB4YzNmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmODAwLDB4MDAwMDAwMDAgIyAtREJMOyBSWgoJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCglsb25nCQkweGMzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgLURCTDsgUlAKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZvdXQoKTogbW92ZSBmcm9tIGZwIHJlZ2lzdGVyIHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9yb3VuZCgpIC0gbmVlZGVkIHRvIGNyZWF0ZSBFWE9QIGZvciBzZ2wvZGJsIHByZWNpc2lvbgkJIwojCW5vcm0oKSAtIG5lZWRlZCB0byBjcmVhdGUgRVhPUCBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCiMJb3ZmX3JlcygpIC0gY3JlYXRlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWNpc2lvbiMKIwl1bmZfcmVzKCkgLSBjcmVhdGUgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWMuCSMKIwlkc3RfZGJsKCkgLSBjcmVhdGUgcm91bmRlZCBkYmwgcHJlY2lzaW9uIHJlc3VsdC4JCSMKIwlkc3Rfc2dsKCkgLSBjcmVhdGUgcm91bmRlZCBzZ2wgcHJlY2lzaW9uIHJlc3VsdC4JCSMKIwlmZXRjaF9kcmVnKCkgLSBmZXRjaCBkeW5hbWljIGstZmFjdG9yIHJlZyBmb3IgcGFja2VkLgkJIwojCWJpbmRlYygpIC0gY29udmVydCBGUCBiaW5hcnkgbnVtYmVyIHRvIHBhY2tlZCBudW1iZXIuCQkjCiMJX21lbV93cml0ZSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkuCQkJCSMKIwlfbWVtX3dyaXRlMigpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkgdW5sZXNzIHN1cHYgbW9kZSAtKGE3KSBleGMuIwojCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5LgkJIwojCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2lzdGVyIGZpbGUuCSMKIwlmYWNjX291dF97Yix3LGwsZCx4fSgpIC0gZGF0YSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQuCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJZDAgPSByb3VuZCBwcmVjLG1vZGUJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgOiBpbnRlcm1lZGlhdGUgdW5kZXJmbG93IG9yIG92ZXJmbG93IHJlc3VsdCBpZgkJIwojCSAgICAgIE9WRkwvVU5GTCBvY2N1cnJlZCBmb3IgYSBzZ2wgb3IgZGJsIG9wZXJhbmQJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoaXMgcm91dGluZSBpcyBhY2Nlc3NlZCBieSBtYW55IGhhbmRsZXJzIHRoYXQgbmVlZCB0byBkbyBhbgkjCiMgb3BjbGFzcyB0aHJlZSBtb3ZlIG9mIGFuIG9wZXJhbmQgb3V0IHRvIG1lbW9yeS4JCQkjCiMJRGVjb2RlIGFuIGZtb3ZlIG91dCAob3BjbGFzcyAzKSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgaWYJIwojIGl0J3MgYix3LGwscyxkLHgsIG9yIHAgaW4gc2l6ZS4gYix3LGwgY2FuIGJlIHN0b3JlZCB0byBlaXRoZXIgYSBkYXRhCSMKIyByZWdpc3RlciBvciBtZW1vcnkuIFRoZSBhbGdvcml0aG0gdXNlcyBhIHN0YW5kYXJkICJmbW92ZSIgdG8gY3JlYXRlCSMKIyB0aGUgcm91bmRlZCByZXN1bHQuIEFsc28sIHNpbmNlIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkLCB0aGlzIGFsc28JIwojIGNyZWF0ZSB0aGUgY29ycmVjdCBPUEVSUiBkZWZhdWx0IHJlc3VsdCBpZiBhcHByb3ByaWF0ZS4JCSMKIwlGb3Igc2dsIG9yIGRibCBwcmVjaXNpb24sIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBjYW4gb2NjdXIuIElmCSMKIyBlaXRoZXIgb2NjdXJzIGFuZCBpcyBlbmFibGVkLCB0aGUgRVhPUC4JCQkJIwojCUZvciBleHRlbmRlZCBwcmVjaXNpb24sIHRoZSBzdGFja2VkIDxlYT4gbXVzdCBiZSBmaXhlZCBhbG9uZwkjCiMgdy8gdGhlIGFkZHJlc3MgaW5kZXggcmVnaXN0ZXIgYXMgYXBwcm9wcmlhdGUgdy8gX2NhbGNfZWFfZm91dCgpLiBJZgkjCiMgdGhlIHNvdXJjZSBpcyBhIGRlbm9ybSBhbmQgaWYgdW5kZXJmbG93IGlzIGVuYWJsZWQsIGFuIEVYT1AgbXVzdCBiZQkjCiMgY3JlYXRlZC4JCQkJCQkJCSMKIwlGb3IgcGFja2VkLCB0aGUgay1mYWN0b3IgbXVzdCBiZSBmZXRjaGVkIGZyb20gdGhlIGluc3RydWN0aW9uCSMKIyB3b3JkIG9yIGEgZGF0YSByZWdpc3Rlci4gVGhlIDxlYT4gbXVzdCBiZSBmaXhlZCBhcyB3LyBleHRlbmRlZAkjCiMgcHJlY2lzaW9uLiBUaGVuLCBiaW5kZWMoKSBpcyBjYWxsZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZQkJIwojIHBhY2tlZCByZXN1bHQuCQkJCQkJCSMKIwlJZiBhdCBhbnkgdGltZSBhbiBhY2Nlc3MgZXJyb3IgaXMgZmxhZ2dlZCBieSBvbmUgb2YgdGhlIG1vdmUtCSMKIyB0by1tZW1vcnkgcm91dGluZXMsIHRoZW4gYSBzcGVjaWFsIGV4aXQgbXVzdCBiZSBtYWRlIHNvIHRoYXQgdGhlCSMKIyBhY2Nlc3MgZXJyb3IgY2FuIGJlIGhhbmRsZWQgcHJvcGVybHkuCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZvdXQKZm91dDoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwlZDEgIyBleHRyYWN0IGRzdCBmbXQKCW1vdi53CQkodGJsX2ZvdXQuYiwlcGMsJWQxLncqMiksJWExICMgdXNlIGFzIGluZGV4CglqbXAJCSh0YmxfZm91dC5iLCVwYywlYTEpCSMganVtcCB0byByb3V0aW5lCgoJc3diZWcJCSYweDgKdGJsX2ZvdXQ6CglzaG9ydAkJZm91dF9sb25nCS0JdGJsX2ZvdXQKCXNob3J0CQlmb3V0X3NnbAktCXRibF9mb3V0CglzaG9ydAkJZm91dF9leHQJLQl0YmxfZm91dAoJc2hvcnQJCWZvdXRfcGFjawktCXRibF9mb3V0CglzaG9ydAkJZm91dF93b3JkCS0JdGJsX2ZvdXQKCXNob3J0CQlmb3V0X2RibAktCXRibF9mb3V0CglzaG9ydAkJZm91dF9ieXRlCS0JdGJsX2ZvdXQKCXNob3J0CQlmb3V0X3BhY2sJLQl0YmxfZm91dAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBmbW92ZS5iIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgT25seSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbnMgZW50ZXIgaGVyZS4gVGhlIG9wZXJhbmQKIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgpmb3V0X2J5dGU6Cgl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJuZS5iCQlmb3V0X2J5dGVfZGVub3JtCSMgbm8KCglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBsb2FkIHZhbHVlCgpmb3V0X2J5dGVfbm9ybToKCWZtb3YubAkJJWQwLCVmcGNyCQkjIGluc2VydCBybmQgcHJlYyxtb2RlCgoJZm1vdi5iCQklZnAwLCVkMAkJIyBleGVjIG1vdmUgb3V0IHcvIGNvcnJlY3Qgcm5kIG1vZGUKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggRlBTUgoJb3IudwkJJWQxLDIrVVNFUl9GUFNSKCVhNikJIyBzYXZlIG5ldyBleGMsYWNjcnVlZCBiaXRzCgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQoJYmVxLmIJCWZvdXRfYnl0ZV9kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSBieXRlCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCgoJcnRzCgpmb3V0X2J5dGVfZG46Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgoJYW5kaS53CQkmMHg3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfYgoJcnRzCgpmb3V0X2J5dGVfZGVub3JtOgoJbW92LmwJCVNSQ19FWCglYTApLCVkMQoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgoJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAoJZm1vdi5zCQklZDEsJWZwMAoJYnJhLmIJCWZvdXRfYnl0ZV9ub3JtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZtb3ZlLncgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAojIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCmZvdXRfd29yZDoKCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPwoJYm5lLmIJCWZvdXRfd29yZF9kZW5vcm0JIyBubwoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKCmZvdXRfd29yZF9ub3JtOgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjOm1vZGUKCglmbW92LncJCSVmcDAsJWQwCQkjIGV4ZWMgbW92ZSBvdXQgdy8gY29ycmVjdCBybmQgbW9kZQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBGUFNSCglvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKCgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQoJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCgliZXEuYgkJZm91dF93b3JkX2RuCQkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0Cglic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHdvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfdwkJIyB5ZXMKCglydHMKCmZvdXRfd29yZF9kbjoKCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCglhbmRpLncJCSYweDcsJWQxCglic3IubAkJc3RvcmVfZHJlZ193CglydHMKCmZvdXRfd29yZF9kZW5vcm06Cgltb3YubAkJU1JDX0VYKCVhMCksJWQxCglhbmRpLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBrZWVwIERFTk9STSBzaWduCglvcmkubAkJJjB4MDA4MDAwMDAsJWQxCQkjIG1ha2Ugc21hbGxlc3Qgc2dsCglmbW92LnMJCSVkMSwlZnAwCglicmEuYgkJZm91dF93b3JkX25vcm0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZm1vdmUubCBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIE9ubHkgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb25zIGVudGVyIGhlcmUuIFRoZSBvcGVyYW5kCiMgaXMgZWl0aGVyIGEgREVOT1JNIG9yIGEgTk9STS4KZm91dF9sb25nOgoJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CglibmUuYgkJZm91dF9sb25nX2Rlbm9ybQkjIG5vCgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgbG9hZCB2YWx1ZQoKZm91dF9sb25nX25vcm06CglmbW92LmwJCSVkMCwlZnBjcgkJIyBpbnNlcnQgcm5kIHByZWM6bW9kZQoKCWZtb3YubAkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2F2ZSBuZXcgZXhjLGFjY3J1ZWQgYml0cwoKZm91dF9sb25nX3dyaXRlOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQoJYmVxLmIJCWZvdXRfbG9uZ19kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCgoJcnRzCgpmb3V0X2xvbmdfZG46Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgoJYW5kaS53CQkmMHg3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfbAoJcnRzCgpmb3V0X2xvbmdfZGVub3JtOgoJbW92LmwJCVNSQ19FWCglYTApLCVkMQoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgoJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAoJZm1vdi5zCQklZDEsJWZwMAoJYnJhLmIJCWZvdXRfbG9uZ19ub3JtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZtb3ZlLnggb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAojIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCiMgVGhlIERFTk9STSBjYXVzZXMgYW4gVW5kZXJmbG93IGV4Y2VwdGlvbi4KZm91dF9leHQ6CgojIHdlIGNvcHkgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgdG8gRlBfU0NSMCBzbyB0aGF0IHRoZSByZXNlcnZlZAojIDE2LWJpdCBmaWVsZCBnZXRzIHplcm9lZC4gd2UgZG8gdGhpcyBzaW5jZSB3ZSBwcm9taXNlIG5vdCB0byBkaXN0dXJiCiMgd2hhdCdzIGF0IFNSQyhhMCkuCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgljbHIudwkJMitGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciByZXNlcnZlZCBmaWVsZAoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQKCglic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaXggc3RhY2tlZCA8ZWE+CgoJbW92LmwJCSVhMCwlYTEJCQkjIHBhc3M6IGRzdCBhZGRyCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBzcmMgYWRkcgoJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyAxMiBieXRlcwoKIyB3ZSBtdXN0IG5vdCB5ZXQgd3JpdGUgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiBkYXRhIHRvIHRoZSBzdGFjawojIGluIHRoZSBwcmUtZGVjcmVtZW50IGNhc2UgZnJvbSBzdXBlcnZpc29yIG1vZGUgb3IgZWxzZSB3ZSdsbCBjb3JydXB0CiMgdGhlIHN0YWNrIGZyYW1lLiBzbywgbGVhdmUgaXQgaW4gRlBfU1JDIGZvciBub3cgYW5kIGRlYWwgd2l0aCBpdCBsYXRlci4uLgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCgliZXEuYgkJZm91dF9leHRfYTcKCglic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCgoJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CglibmUuYgkJZm91dF9leHRfZGVub3JtCQkjIG5vCglydHMKCiMgdGhlIG51bWJlciBpcyBhIERFTk9STS4gbXVzdCBzZXQgdGhlIHVuZGVyZmxvdyBleGNlcHRpb24gYml0CmZvdXRfZXh0X2Rlbm9ybToKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZGVyZmxvdyBleGMgYml0CgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCglhbmRpLmIJCSYweDBhLCVkMAkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmb3V0X2V4dF9leGMJCSMgeWVzCglydHMKCiMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCmZvdXRfZXh0X2E3OgoJYnNyLmwJCV9tZW1fd3JpdGUyCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUudwkJZm91dF9leHRfZXJyCQkjIHllcwoKCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPwoJYm5lLmIJCWZvdXRfZXh0X2Rlbm9ybQkJIyBubwoJcnRzCgpmb3V0X2V4dF9leGM6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhCgluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKCWFuZGkudwkJJjB4N2ZmZiwlZDAKCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBrZWVwIG9ubHkgb2xkIHNpZ24KCW9yLncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKZm91dF9leHRfZXJyOgoJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgZml4IHN0YWNrZWQgYTYKCWJyYS5sCQlmYWNjX291dF94CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZm1vdmUucyBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmb3V0X3NnbDoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYwoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKCiMKIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CiMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKIyBzZXBhcmF0ZWx5LiBvdGhlcndpc2UsIHNldCB0aGUgRlBDUiB0byB0aGUgcHJvcGVyIHJvdW5kaW5nIG1vZGUgYW5kCiMgZXhlY3V0ZSB0aGUgbW92ZS4KIwoJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBleHRyYWN0IGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCgljbXBpLncJCSVkMCwmU0dMX0hJCQkjIHdpbGwgb3BlcmFuZCBvdmVyZmxvdz8KCWJndC53CQlmb3V0X3NnbF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKCWJlcS53CQlmb3V0X3NnbF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAoJY21waS53CQklZDAsJlNHTF9MTwkJIyB3aWxsIG9wZXJhbmQgdW5kZXJmbG93PwoJYmx0LncJCWZvdXRfc2dsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CgojCiMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LnMiCiMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCiMKZm91dF9zZ2xfZXhnOgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSBkb2VzIGNvbnZlcnQgYW5kIHJvdW5kCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoKCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2V0IHBvc3NpYmxlIGluZXgyL2FpbmV4Cgpmb3V0X3NnbF9leGdfd3JpdGU6Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQoJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCgliZXEuYgkJZm91dF9zZ2xfZXhnX3dyaXRlX2RuCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZwoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcwoKCXJ0cwoKZm91dF9zZ2xfZXhnX3dyaXRlX2RuOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KCWFuZGkudwkJJjB4NywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2wKCXJ0cwoKIwojIGhlcmUsIHdlIGtub3cgdGhhdCB0aGUgb3BlcmFuZCB3b3VsZCBVTkZMIGlmIG1vdmVkIG91dCB0byBzaW5nbGUgcHJlYywKIyBzbywgZGVub3JtIGFuZCByb3VuZCBhbmQgdGhlbiB1c2UgZ2VuZXJpYyBzdG9yZSBzaW5nbGUgcm91dGluZSB0bwojIHdyaXRlIHRoZSB2YWx1ZSB0byBtZW1vcnkuCiMKZm91dF9zZ2xfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFVORkwKCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YubAkJJWEwLC0oJXNwKQoKCWNsci5sCQklZDAJCQkjIHBhc3M6IFMuRi4gPSAwCgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGZldGNoIHNyYyBvcHR5cGUgdGFnCglibmUuYgkJZm91dF9zZ2xfdW5mbF9jb250CSMgbGV0IERFTk9STXMgZmFsbCB0aHJvdWdoCgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KCmZvdXRfc2dsX3VuZmxfY29udDoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBmb3AKCWJzci5sCQlkc3Rfc2dsCQkJIyBjb252ZXJ0IHRvIHNpbmdsZSBwcmVjCgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQoJYmVxLmIJCWZvdXRfc2dsX3VuZmxfZG4JIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCgoJYnJhLmIJCWZvdXRfc2dsX3VuZmxfY2hrZXhjCgpmb3V0X3NnbF91bmZsX2RuOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KCWFuZGkudwkJJjB4NywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2wKCmZvdXRfc2dsX3VuZmxfY2hrZXhjOgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS53CQlmb3V0X3NkX2V4Y191bmZsCSMgeWVzCglhZGRxLmwJCSYweDQsJXNwCglydHMKCiMKIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKIwpmb3V0X3NnbF9vdmZsOgoJdHN0LmIJCTMrU1JDX0hJKCVhMCkJCSMgaXMgcmVzdWx0IGluZXhhY3Q/CglibmUuYgkJZm91dF9zZ2xfb3ZmbF9pbmV4MgoJdHN0LmwJCVNSQ19MTyglYTApCQkjIGlzIHJlc3VsdCBpbmV4YWN0PwoJYm5lLmIJCWZvdXRfc2dsX292ZmxfaW5leDIKCW9yaS53CQkmb3ZmbF9pbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCWJyYS5iCQlmb3V0X3NnbF9vdmZsX2NvbnQKZm91dF9zZ2xfb3ZmbF9pbmV4MjoKCW9yaS53CQkmb3ZmaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4L2luZXgyCgpmb3V0X3NnbF9vdmZsX2NvbnQ6Cgltb3YubAkJJWEwLC0oJXNwKQoKIyBjYWxsIG92Zl9yZXMoKSB3LyBzZ2wgcHJlYyBhbmQgdGhlIGNvcnJlY3Qgcm5kIG1vZGUgdG8gY3JlYXRlIHRoZSBkZWZhdWx0CiMgb3ZlcmZsb3cgcmVzdWx0LiBET04nVCBzYXZlIHRoZSByZXR1cm5lZCBjY29kZXMgZnJvbSBvdmZfcmVzKCkgc2luY2UKIyBmbW92ZSBvdXQgZG9lc24ndCBhbHRlciB0aGVtLgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglzbWkJCSVkMQkJCSMgc2V0IGlmIHNvCgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHNnbCBwcmVjLHJuZCBtb2RlCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBPVkZMIHJlc3VsdAoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAoJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSB0byBzaW5nbGUKCgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQoJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCgliZXEuYgkJZm91dF9zZ2xfb3ZmbF9kbgkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0Cglic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKCglicmEuYgkJZm91dF9zZ2xfb3ZmbF9jaGtleGMKCmZvdXRfc2dsX292ZmxfZG46Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgoJYW5kaS53CQkmMHg3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfbAoKZm91dF9zZ2xfb3ZmbF9jaGtleGM6Cgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLncJCWZvdXRfc2RfZXhjX292ZmwJIyB5ZXMKCWFkZHEubAkJJjB4NCwlc3AKCXJ0cwoKIwojIG1vdmUgb3V0IE1BWSBvdmVyZmxvdzoKIyAoMSkgZm9yY2UgdGhlIGV4cCB0byAweDNmZmYKIyAoMikgZG8gYSBtb3ZlIHcvIGFwcHJvcHJpYXRlIHJuZCBtb2RlCiMgKDMpIGlmIGV4cCBzdGlsbCBlcXVhbHMgemVybywgdGhlbiBpbnNlcnQgb3JpZ2luYWwgZXhwb25lbnQKIwlmb3IgdGhlIGNvcnJlY3QgcmVzdWx0LgojICAgICBpZiBleHAgbm93IGVxdWFscyBvbmUsIHRoZW4gaXQgb3ZlcmZsb3dlZCBzbyBjYWxsIG92Zl9yZXMuCiMKZm91dF9zZ2xfbWF5X292Zmw6Cgltb3YudwkJU1JDX0VYKCVhMCksJWQxCQkjIGZldGNoIGN1cnJlbnQgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIGl0LGNsZWFyIGV4cAoJb3JpLncJCSYweDNmZmYsJWQxCQkjIGluc2VydCBleHAgPSAwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBzY2FsZWQgZXhwCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSBoaShtYW4pCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpICMgY29weSBsbyhtYW4pCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgoJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGZvcmNlIGZvcCB0byBiZSByb3VuZGVkCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZhYnMueAkJJWZwMAkJCSMgbmVlZCBhYnNvbHV0ZSB2YWx1ZQoJZmNtcC5iCQklZnAwLCYweDIJCSMgZGlkIGV4cG9uZW50IGluY3JlYXNlPwoJZmJsdC53CQlmb3V0X3NnbF9leGcJCSMgbm87IGdvIGZpbmlzaCBOT1JNCglicmEudwkJZm91dF9zZ2xfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoKIyMjIyMjIyMjIyMjIyMjIwoKZm91dF9zZF9leGNfdW5mbDoKCW1vdi5sCQkoJXNwKSssJWEwCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyB3YXMgc3JjIGEgREVOT1JNPwoJYm5lLmIJCWZvdXRfc2RfZXhjX2NvbnQJIyBubwoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAoJYnNyLmwJCW5vcm0KCW5lZy5sCQklZDAKCWFuZGkudwkJJjB4N2ZmZiwlZDAKCWJmaW5zCQklZDAsRlBfU0NSMF9FWCglYTYpeyYxOiYxNX0KCWJyYS5iCQlmb3V0X3NkX2V4Y19jb250Cgpmb3V0X3NkX2V4YzoKZm91dF9zZF9leGNfb3ZmbDoKCW1vdi5sCQkoJXNwKSssJWEwCQkjIHJlc3RvcmUgYTAKCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgpmb3V0X3NkX2V4Y19jb250OgoJYmNscgkJJjB4NyxGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciBzaWduIGJpdAoJc25lLmIJCTIrRlBfU0NSMF9FWCglYTYpCSMgc2V0IGludGVybmFsIHNpZ24gYml0CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gREVOT1JNCgoJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCglsc3IuYgkJJjB4NCwlZDEKCWFuZGkudwkJJjB4MGMsJWQxCglzd2FwCQklZDEKCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQoJbHNyLmIJCSYweDQsJWQxCglhbmRpLncJCSYweDAzLCVkMQoJY2xyLmwJCSVkMAkJCSMgcGFzczogemVybyBnLHIscwoJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIERFTk9STQoKCXRzdC5iCQkyK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIEVYT1AgbmVnYXRpdmU/CgliZXEuYgkJZm91dF9zZF9leGNfZG9uZQkjIG5vCglic2V0CQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIHllcwoKZm91dF9zZF9leGNfZG9uZToKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZtb3ZlLmQgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmb3V0X2RibDoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYwoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKCiMKIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CiMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKIyBzZXBhcmF0ZWx5LiBvdGhlcndpc2UsIHNldCB0aGUgRlBDUiB0byB0aGUgcHJvcGVyIHJvdW5kaW5nIG1vZGUgYW5kCiMgZXhlY3V0ZSB0aGUgbW92ZS4KIwoJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBleHRyYWN0IGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCgljbXBpLncJCSVkMCwmREJMX0hJCQkjIHdpbGwgb3BlcmFuZCBvdmVyZmxvdz8KCWJndC53CQlmb3V0X2RibF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKCWJlcS53CQlmb3V0X2RibF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAoJY21waS53CQklZDAsJkRCTF9MTwkJIyB3aWxsIG9wZXJhbmQgdW5kZXJmbG93PwoJYmx0LncJCWZvdXRfZGJsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CgojCiMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LmQiCiMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCiMKZm91dF9kYmxfZXhnOgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm1vdi5kCQklZnAwLExfU0NSMSglYTYpCSMgc3RvcmUgZG9lcyBjb252ZXJ0IGFuZCByb3VuZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKCglvci53CQklZDAsMitVU0VSX0ZQU1IoJWE2KQkjIHNldCBwb3NzaWJsZSBpbmV4Mi9haW5leAoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKCWxlYQkJTF9TQ1IxKCVhNiksJWEwCQkjIHBhc3M6IHNyYyBhZGRyCgltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCglic3IubAkJX2RtZW1fd3JpdGUJCSMgc3RvcmUgZGJsIGZvcCB0byBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKCglydHMJCQkJCSMgbm87IHNvIHdlJ3JlIGZpbmlzaGVkCgojCiMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kIHdvdWxkIFVORkwgaWYgbW92ZWQgb3V0IHRvIGRvdWJsZSBwcmVjLAojIHNvLCBkZW5vcm0gYW5kIHJvdW5kIGFuZCB0aGVuIHVzZSBnZW5lcmljIHN0b3JlIGRvdWJsZSByb3V0aW5lIHRvCiMgd3JpdGUgdGhlIHZhbHVlIHRvIG1lbW9yeS4KIwpmb3V0X2RibF91bmZsOgoJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgVU5GTAoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCW1vdi5sCQklYTAsLSglc3ApCgoJY2xyLmwJCSVkMAkJCSMgcGFzczogUy5GLiA9IDAKCgljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgZmV0Y2ggc3JjIG9wdHlwZSB0YWcKCWJuZS5iCQlmb3V0X2RibF91bmZsX2NvbnQJIyBsZXQgREVOT1JNcyBmYWxsIHRocm91Z2gKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQoKZm91dF9kYmxfdW5mbF9jb250OgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQoJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGMgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIGZvcAoJYnNyLmwJCWRzdF9kYmwJCQkjIGNvbnZlcnQgdG8gc2luZ2xlIHByZWMKCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikKCW1vdi5sCQklZDEsTF9TQ1IyKCVhNikKCgltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCglsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgoJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcwoJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS53CQlmb3V0X3NkX2V4Y191bmZsCSMgeWVzCglhZGRxLmwJCSYweDQsJXNwCglydHMKCiMKIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKIwpmb3V0X2RibF9vdmZsOgoJbW92LncJCTIrU1JDX0xPKCVhMCksJWQwCglhbmRpLncJCSYweDdmZiwlZDAKCWJuZS5iCQlmb3V0X2RibF9vdmZsX2luZXgyCgoJb3JpLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoJYnJhLmIJCWZvdXRfZGJsX292ZmxfY29udApmb3V0X2RibF9vdmZsX2luZXgyOgoJb3JpLncJCSZvdmZpbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgvaW5leDIKCmZvdXRfZGJsX292ZmxfY29udDoKCW1vdi5sCQklYTAsLSglc3ApCgojIGNhbGwgb3ZmX3JlcygpIHcvIGRibCBwcmVjIGFuZCB0aGUgY29ycmVjdCBybmQgbW9kZSB0byBjcmVhdGUgdGhlIGRlZmF1bHQKIyBvdmVyZmxvdyByZXN1bHQuIERPTidUIHNhdmUgdGhlIHJldHVybmVkIGNjb2RlcyBmcm9tIG92Zl9yZXMoKSBzaW5jZQojIGZtb3ZlIG91dCBkb2Vzbid0IGFsdGVyIHRoZW0uCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KCXNtaQkJJWQxCQkJIyBzZXQgaWYgc28KCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogZGJsIHByZWMscm5kIG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIE9WRkwgcmVzdWx0CglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBsb2FkIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CglmbW92LmQJCSVmcDAsTF9TQ1IxKCVhNikJIyBzdG9yZSB0byBkb3VibGUKCgltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCglsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgoJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcwoJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS53CQlmb3V0X3NkX2V4Y19vdmZsCSMgeWVzCglhZGRxLmwJCSYweDQsJXNwCglydHMKCiMKIyBtb3ZlIG91dCBNQVkgb3ZlcmZsb3c6CiMgKDEpIGZvcmNlIHRoZSBleHAgdG8gMHgzZmZmCiMgKDIpIGRvIGEgbW92ZSB3LyBhcHByb3ByaWF0ZSBybmQgbW9kZQojICgzKSBpZiBleHAgc3RpbGwgZXF1YWxzIHplcm8sIHRoZW4gaW5zZXJ0IG9yaWdpbmFsIGV4cG9uZW50CiMJZm9yIHRoZSBjb3JyZWN0IHJlc3VsdC4KIyAgICAgaWYgZXhwIG5vdyBlcXVhbHMgb25lLCB0aGVuIGl0IG92ZXJmbG93ZWQgc28gY2FsbCBvdmZfcmVzLgojCmZvdXRfZGJsX21heV9vdmZsOgoJbW92LncJCVNSQ19FWCglYTApLCVkMQkJIyBmZXRjaCBjdXJyZW50IHNpZ24KCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBpdCxjbGVhciBleHAKCW9yaS53CQkmMHgzZmZmLCVkMQkJIyBpbnNlcnQgZXhwID0gMAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgc2NhbGVkIGV4cAoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KSAjIGNvcHkgaGkobWFuKQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgbG8obWFuKQoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBmb3JjZSBmb3AgdG8gYmUgcm91bmRlZAoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglmYWJzLngJCSVmcDAJCQkjIG5lZWQgYWJzb2x1dGUgdmFsdWUKCWZjbXAuYgkJJWZwMCwmMHgyCQkjIGRpZCBleHBvbmVudCBpbmNyZWFzZT8KCWZibHQudwkJZm91dF9kYmxfZXhnCQkjIG5vOyBnbyBmaW5pc2ggTk9STQoJYnJhLncJCWZvdXRfZGJsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWRzdF9kYmwoKTogY3JlYXRlIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgZnJvbSBleHRlbmRlZCBwcmVjLgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGhpKGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0KQkJCQkjCiMJZDEgPSBsbyhkb3VibGUgcHJlY2lzaW9uIHJlc3VsdCkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMgIENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIGRvdWJsZSBwcmVjaXNpb24uCQkJIwojICBOb3RlOiBubyBhdHRlbXB0IGlzIG1hZGUgdG8gcm91bmQgdGhlIGV4dGVuZGVkIHZhbHVlIHRvIGRvdWJsZS4JIwojCWRibF9zaWduID0gZXh0X3NpZ24JCQkJCQkjCiMJZGJsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2ZmKGRibCBiaWFzKQkJIwojCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCiMJZGJsX21hbnQgPSBleHRfbWFudHs2MjoxMn0JCQkJCSMKIwkJCQkJCQkJCSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8CSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgICAgMzIgICAgICAzMSAgICAgMTEJICAwCSMKIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKIwkJCSAgICAgICAgICAgICB2CQkJICAgICB2CQkjCiMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0JCSMKIyAgZG91YmxlICAgLT4JCSAgICAgIHxzfGV4cHwgbWFudCAgfCAgIHwgIG1hbnQgICAgICAgfAkJIwojCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tCQkjCiMJCQkgICAgICA2MyAgICAgNTEgICAzMiAgIDMxCSAgICAgICAwCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZHN0X2RibDoKCWNsci5sCQklZDAJCQkjIGNsZWFyIGQwCgltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcwoJYWRkaS53CQkmREJMX0JJQVMsJWQwCQkjIGFkZCBkb3VibGUgcHJlY2lzaW9uIGJpYXMKCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KCWJtaS5iCQlkc3RfZ2V0X2R1cHBlcgkJIyBubwoJc3VicS53CQkmMHgxLCVkMAkJIyB5ZXM7IGRlbm9ybSBiaWFzID0gREJMX0JJQVMgLSAxCmRzdF9nZXRfZHVwcGVyOgoJc3dhcAkJJWQwCQkJIyBkMCBub3cgaW4gdXBwZXIgd29yZAoJbHNsLmwJCSYweDQsJWQwCQkjIGQwIGluIHByb3BlciBwbGFjZSBmb3IgZGJsIHByZWMgZXhwCgl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KCWJwbC5iCQlkc3RfZ2V0X2RtYW4JCSMgaWYgcG9zdGl2ZSwgZ28gcHJvY2VzcyBtYW50aXNzYQoJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBzZXQgc2lnbgpkc3RfZ2V0X2RtYW46Cgltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKCWJmZXh0dQkJJWQxeyYxOiYyMH0sJWQxCQkjIGdldCB1cHBlciAyMCBiaXRzIG9mIG1zCglvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIGRvdWJsZQoJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBwdXQgdGhlIG5ldyBleHAgYmFjayBvbiB0aGUgc3RhY2sKCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQoJbW92LmwJCSYyMSwlZDAJCQkjIGxvYWQgc2hpZnQgY291bnQKCWxzbC5sCQklZDAsJWQxCQkJIyBwdXQgbG93ZXIgMTEgYml0cyBpbiB1cHBlciBiaXRzCgltb3YubAkJJWQxLExfU0NSMiglYTYpCQkjIGJ1aWxkIGxvd2VyIGx3b3JkIGluIG1lbW9yeQoJbW92LmwJCUZURU1QX0xPKCVhMCksJWQxCSMgZ2V0IGxzIG1hbnRpc3NhCgliZmV4dHUJCSVkMXsmMDomMjF9LCVkMAkJIyBnZXQgbHMgMjEgYml0cyBvZiBkb3VibGUKCW1vdi5sCQlMX1NDUjIoJWE2KSwlZDEKCW9yLmwJCSVkMCwlZDEJCQkjIHB1dCB0aGVtIGluIGRvdWJsZSByZXN1bHQKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZHN0X3NnbCgpOiBjcmVhdGUgc2luZ2xlIHByZWNpc2lvbiB2YWx1ZSBmcm9tIGV4dGVuZGVkIHByZWMJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IHNpbmdsZSBwcmVjaXNpb24gcmVzdWx0CQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkJCQkJCQkJCSMKIyBDaGFuZ2VzIGV4dGVuZGVkIHByZWNpc2lvbiB0byBzaW5nbGUgcHJlY2lzaW9uLgkJCSMKIwlzZ2xfc2lnbiA9IGV4dF9zaWduCQkJCQkJIwojCXNnbF9leHAgPSBleHRfZXhwIC0gJDNmZmYoZXh0IGJpYXMpICsgJDdmKHNnbCBiaWFzKQkJIwojCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCiMJc2dsX21hbnQgPSBleHRfbWFudHs2MjoxMn0JCQkJCSMKIwkJCQkJCQkJCSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8CSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgNDAgMzIgICAgICAzMSAgICAgMTIJICAwCSMKIwkJCQkgICAgIHwJICAgfAkJCQkjCiMJCQkJICAgICB8CSAgIHwJCQkJIwojCQkJCSAgICAgfAkgICB8CQkJCSMKIwkJCSAgICAgICAgICAgICB2ICAgICB2CQkJCSMKIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQkJCQkjCiMgIHNpbmdsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwJCQkJIwojCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tCQkJCSMKIwkJCSAgICAgIDMxICAgICAyMiAgICAgMAkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmRzdF9zZ2w6CgljbHIubAkJJWQwCgltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcwoJYWRkaS53CQkmU0dMX0JJQVMsJWQwCQkjIGFkZCBzaW5nbGUgcHJlY2lzaW9uIGJpYXMKCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KCWJtaS5iCQlkc3RfZ2V0X3N1cHBlcgkJIyBubwoJc3VicS53CQkmMHgxLCVkMAkJIyB5ZXM7IGRlbm9ybSBiaWFzID0gU0dMX0JJQVMgLSAxCmRzdF9nZXRfc3VwcGVyOgoJc3dhcAkJJWQwCQkJIyBwdXQgZXhwIGluIHVwcGVyIHdvcmQgb2YgZDAKCWxzbC5sCQkmMHg3LCVkMAkJIyBzaGlmdCBpdCBpbnRvIHNpbmdsZSBleHAgYml0cwoJdHN0LmIJCUZURU1QX0VYKCVhMCkJCSMgdGVzdCBzaWduCglicGwuYgkJZHN0X2dldF9zbWFuCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQoJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBwdXQgaW4gc2lnbiBmaXJzdApkc3RfZ2V0X3NtYW46Cgltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKCWFuZGkubAkJJjB4N2ZmZmZmMDAsJWQxCQkjIGdldCB1cHBlciAyMyBiaXRzIG9mIG1zCglsc3IubAkJJjB4OCwlZDEJCSMgYW5kIHB1dCB0aGVtIGZsdXNoIHJpZ2h0Cglvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIHNpbmdsZQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZm91dF9wYWNrOgoJYnNyLmwJCV9jYWxjX2VhX2ZvdXQJCSMgZmV0Y2ggdGhlIDxlYT4KCW1vdi5sCQklYTAsLSglc3ApCgoJbW92LmIJCVNUQUcoJWE2KSwlZDAJCSMgZmV0Y2ggaW5wdXQgdHlwZQoJYm5lLncJCWZvdXRfcGFja19ub3Rfbm9ybQkjIGlucHV0IGlzIG5vdCBOT1JNCgpmb3V0X3BhY2tfbm9ybToKCWJ0c3QJCSYweDQsRVhDX0NNRFJFRyglYTYpCSMgc3RhdGljIG9yIGR5bmFtaWM/CgliZXEuYgkJZm91dF9wYWNrX3MJCSMgc3RhdGljCgpmb3V0X3BhY2tfZDoKCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEJIyBmZXRjaCBkeW5hbWljIHJlZwoJbHNyLmIJCSYweDQsJWQxCglhbmRpLncJCSYweDcsJWQxCgoJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggRG4gdy8gay1mYWN0b3IKCglicmEuYgkJZm91dF9wYWNrX3R5cGUKZm91dF9wYWNrX3M6Cgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggc3RhdGljIGZpZWxkCgpmb3V0X3BhY2tfdHlwZToKCWJmZXh0cwkJJWQweyYyNTomN30sJWQwCQkjIGV4dHJhY3Qgay1mYWN0b3IKCW1vdi5sCSVkMCwtKCVzcCkKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gaW5wdXQKCiMgYmluZGVjIGlzIGN1cnJlbnRseSBzY3JhbWJsaW5nIEZQX1NSQyBmb3IgZGVub3JtIGlucHV0cy4KIyB3ZSdsbCBoYXZlIHRvIGNoYW5nZSB0aGlzLCBidXQgZm9yIG5vdywgdG91Z2ggbHVjayEhIQoJYnNyLmwJCWJpbmRlYwkJCSMgY29udmVydCB4cHJlYyB0byBwYWNrZWQKCiMJYW5kaS5sCQkmMHhjZmZmMDAwZixGUF9TQ1IwKCVhNikgIyBjbGVhciB1bnVzZWQgZmllbGRzCglhbmRpLmwJCSYweGNmZmZmMDBmLEZQX1NDUjAoJWE2KSAjIGNsZWFyIHVudXNlZCBmaWVsZHMKCgltb3YubAkoJXNwKSssJWQwCgoJdHN0LmIJCTMrRlBfU0NSMF9FWCglYTYpCglibmUuYgkJZm91dF9wYWNrX3NldAoJdHN0LmwJCUZQX1NDUjBfSEkoJWE2KQoJYm5lLmIJCWZvdXRfcGFja19zZXQKCXRzdC5sCQlGUF9TQ1IwX0xPKCVhNikKCWJuZS5iCQlmb3V0X3BhY2tfc2V0CgojIGFkZCB0aGUgZXh0cmEgY29uZGl0aW9uIHRoYXQgb25seSBpZiB0aGUgay1mYWN0b3Igd2FzIHplcm8sIHRvbywgc2hvdWxkCiMgd2UgemVybyB0aGUgZXhwb25lbnQKCXRzdC5sCQklZDAKCWJuZS5iCQlmb3V0X3BhY2tfc2V0CiMgIm1hbnRpc3NhIiBpcyBhbGwgemVybyB3aGljaCBtZWFucyB0aGF0IHRoZSBhbnN3ZXIgaXMgemVyby4gYnV0LCB0aGUgJzA0MAojIGFsZ29yaXRobSBhbGxvd3MgdGhlIGV4cG9uZW50IHRvIGJlIG5vbi16ZXJvLiB0aGUgODgxLzIgZG8gbm90LiB0aGVyZWZvcmUsCiMgaWYgdGhlIG1hbnRpc3NhIGlzIHplcm8sIEkgd2lsbCB6ZXJvIHRoZSBleHBvbmVudCwgdG9vLgojIHRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgZXhwb25lbnRzIHNpZ24gYml0IGlzIGFsbG93ZWQgdG8gYmUgbm9uLXplcm8KIyBmb3IgYSB6ZXJvLCBhbHNvLi4uCglhbmRpLncJCSYweGYwMDAsRlBfU0NSMCglYTYpCgpmb3V0X3BhY2tfc2V0OgoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHNyYyBhZGRyCgpmb3V0X3BhY2tfd3JpdGU6Cgltb3YubAkJKCVzcCkrLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgoJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyAxMiBieXRlcwoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZwoJYmVxLmIJCWZvdXRfcGFja19hNwoKCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKCglydHMKCiMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCmZvdXRfcGFja19hNzoKCWJzci5sCQlfbWVtX3dyaXRlMgkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKCglydHMKCmZvdXRfcGFja19ub3Rfbm9ybToKCWNtcGkuYgkJJWQwLCZERU5PUk0JCSMgaXMgaXQgYSBERU5PUk0/CgliZXEudwkJZm91dF9wYWNrX25vcm0JCSMgeWVzCglsZWEJCUZQX1NSQyglYTYpLCVhMAoJY2xyLncJCTIrRlBfU1JDX0VYKCVhNikKCWNtcGkuYgkJJWQwLCZTTkFOCQkjIGlzIGl0IGFuIFNOQU4/CgliZXEuYgkJZm91dF9wYWNrX3NuYW4JCSMgeWVzCglicmEuYgkJZm91dF9wYWNrX3dyaXRlCQkjIG5vCgpmb3V0X3BhY2tfc25hbjoKCW9yaS53CQkmc25hbmlvcDJfbWFzayxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFNOQU4vQUlPUAoJYnNldAkJJjB4NixGUF9TUkNfSEkoJWE2KQkjIHNldCBzbmFuIGJpdAoJYnJhLmIJCWZvdXRfcGFja193cml0ZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZm11bCgpOiBlbXVsYXRlcyB0aGUgZm11bCBpbnN0cnVjdGlvbgkJCQkjCiMJZnNtdWwoKTogZW11bGF0ZXMgdGhlIGZzbXVsIGluc3RydWN0aW9uCQkJCSMKIwlmZG11bCgpOiBlbXVsYXRlcyB0aGUgZmRtdWwgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCiMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIwojCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBtdWx0aXBseQkjCiMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZm11bCB0bwkJIwojIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIwojIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHJldHVybiB0aGUgZGVmYXVsdCBvdmVyZmxvdy91bmRlcmZsb3cgcmVzdWx0CSMKIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCiMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJYWxpZ24JCTB4MTAKdGJsX2ZtdWxfb3ZmbDoKCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHRfbWF4Cglsb25nCQkweDNmZmYgLSAweDQwN2UJCSMgc2dsX21heAoJbG9uZwkJMHgzZmZmIC0gMHg0M2ZlCQkjIGRibF9tYXgKdGJsX2ZtdWxfdW5mbDoKCWxvbmcJCTB4M2ZmZiArIDB4MDAwMQkJIyBleHRfdW5mbAoJbG9uZwkJMHgzZmZmIC0gMHgzZjgwCQkjIHNnbF91bmZsCglsb25nCQkweDNmZmYgLSAweDNjMDAJCSMgZGJsX3VuZmwKCglnbG9iYWwJCWZzbXVsCmZzbXVsOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCglicmEuYgkJZm11bAoKCWdsb2JhbAkJZmRtdWwKZmRtdWw6CglhbmRpLmIJCSYweDMwLCVkMAoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZtdWwKZm11bDoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCWJuZS53CQlmbXVsX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgpmbXVsX25vcm06Cgltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQoKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAoKCWFkZC5sCQklZDAsKCVzcCkJCSMgU0NBTEVfRkFDVE9SID0gc2NhbGUxICsgc2NhbGUyCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uCglsc3IuYgkJJjB4NiwlZDEJCSMgc2hpZnQgdG8gbG8gYml0cwoJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCgljbXAubAkJJWQwLCh0YmxfZm11bF9vdmZsLncsJXBjLCVkMS53KjQpICMgd291bGQgcmVzdWx0IG92Zmw/CgliZXEudwkJZm11bF9tYXlfb3ZmbAkJIyByZXN1bHQgbWF5IHJuZCB0byBvdmVyZmxvdwoJYmx0LncJCWZtdWxfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdwoKCWNtcC5sCQklZDAsKHRibF9mbXVsX3VuZmwudywlcGMsJWQxLncqNCkgIyB3b3VsZCByZXN1bHQgdW5mbD8KCWJlcS53CQlmbXVsX21heV91bmZsCQkjIHJlc3VsdCBtYXkgcm5kIHRvIG5vIHVuZmwKCWJndC53CQlmbXVsX3VuZmwJCSMgcmVzdWx0IHdpbGwgdW5kZXJmbG93CgojCiMgTk9STUFMOgojIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIHdpbGwgbmVpdGhlciBvdmVyZmxvdyBub3IgdW5kZXJmbG93LgojIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlLgojIC0gc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCB1c2luZyB0aGUgc2NhbGUgZmFjdG9yLiBpZiBib3RoIG9wZXJhbmRzIHdlcmUKIyBub3JtYWxpemVkIHRoZW4gd2UgcmVhbGx5IGRvbid0IG5lZWQgdG8gZ28gdGhyb3VnaCB0aGlzIHNjYWxpbmcuIGJ1dCBmb3Igbm93LAojIHRoaXMgd2lsbCBkby4KIwpmbXVsX25vcm1hbDoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZtdWxfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZFUkZMT1c6CiMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gaXMgYW4gb3ZlcmZsb3cuCiMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUgaW4gb3JkZXIgdG8KIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCiMgLSBpZiBvdmVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIHdlIG5lZWQgYSBtdWx0aXBseSByZXN1bHQgcm91bmRlZCB0bwojIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCiMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKIyBtdWx0aXBseSB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gYW5kIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUuIHRoZSByZXN1bHQKIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQojIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCiMKZm11bF9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKIyBzYXZlIHNldHRpbmcgdGhpcyB1bnRpbCBub3cgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGZtdWxfbWF5X292ZmwgbWF5IGp1bXAgaW4KZm11bF9vdmZsX3RzdDoKCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZtdWxfb3ZmbF9lbmEJCSMgeWVzCgojIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQKZm11bF9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHJuZCBwcmVjLG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZGTCBpcyBlbmFibGVkOyBDcmVhdGUgRVhPUDoKIyAtIGlmIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoZSBFWE9QLiBzaW1wbHkgYmlhcyB0aGUgZXhwb25lbnQKIyB3aXRoIGFuIGV4dHJhIC0weDYwMDAuIGlmIHRoZSBwcmVjaXNpb24gaXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgbmVlZCB0bwojIGNhbGN1bGF0ZSBhIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KIwpmbXVsX292ZmxfZW5hOgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgdGVzdCB0aGUgcm5kIHByZWMKCWJuZS5iCQlmbXVsX292ZmxfZW5hX3NkCSMgaXQncyBzZ2wgb3IgZGJsCgpmbXVsX292ZmxfZW5hX2NvbnQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmbXVsX292ZmxfZGlzCgpmbXVsX292ZmxfZW5hX3NkOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUgb25seQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglicmEuYgkJZm11bF9vdmZsX2VuYV9jb250CgojCiMgbWF5IE9WRVJGTE9XOgojIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIE1BWSBvdmVyZmxvdy4KIyAtIGRvIHRoZSBtdWx0aXBseSB0byB0aGUgcHJvcGVyIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZSBpbiBvcmRlciB0bwojIHNldCB0aGUgaW5leGFjdCBiaXRzLgojIC0gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBhbmQgcmV0dXJuIGl0IGluIGZwMC4KIwpmbXVsX21heV9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KCWZiZ2UudwkJZm11bF9vdmZsX3RzdAkJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZm11bF9ub3JtYWxfZXhpdAoKIwojIFVOREVSRkxPVzoKIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiBpcyBhbiB1bmRlcmZsb3cuCiMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUgaW4gb3JkZXIgdG8KIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCiMgLSBpZiBvdmVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIHdlIG5lZWQgYSBtdWx0aXBseSByZXN1bHQgcm91bmRlZCB0bwojIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCiMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKIyBtdWx0aXBseSB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gYW5kIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUuIHRoZSByZXN1bHQKIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQojIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCiMKZm11bF91bmZsOgoJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CgojIGZvciBmdW4sIGxldCdzIHVzZSBvbmx5IGV4dGVuZGVkIHByZWNpc2lvbiwgcm91bmQgdG8gemVyby4gdGhlbiwgbGV0CiMgdGhlIHVuZl9yZXMoKSByb3V0aW5lIGZpZ3VyZSBvdXQgYWxsIHRoZSByZXN0LgojIHdpbGwgd2UgZ2V0IHRoZSBjb3JyZWN0IGFuc3dlci4KCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKCglmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZm11bF91bmZsX2VuYQkJIyB5ZXMKCmZtdWxfdW5mbF9kaXM6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQoJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMyIG1heSBoYXZlIHNldCAnWicKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIFVORkwgaXMgZW5hYmxlZC4KIwpmbXVsX3VuZmxfZW5hOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUuYgkJZm11bF91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCgojIGlmIHRoZSBybmQgbW9kZSBpcyBhbnl0aGluZyBidXQgUlosIHRoZW4gd2UgaGF2ZSB0byByZS1kbyB0aGUgYWJvdmUKIyBtdWx0aXBsaWNhdGlvbiBiZWN1YXNlIHdlIHVzZWQgUlogZm9yIGFsbC4KCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKZm11bF91bmZsX2VuYV9jb250OgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEudwkJZm11bF91bmZsX2RpcwoKZm11bF91bmZsX2VuYV9zZDoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCglmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgoKCWJyYS5iCQlmbXVsX3VuZmxfZW5hX2NvbnQKCiMgTUFZIFVOREVSRkxPVzoKIyAtdXNlIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUgYW5kIHByZWNpc2lvbi4gdGhpcyBjb2RlIGZhdm9ycyBvcGVyYXRpb25zCiMgdGhhdCBkbyBub3QgdW5kZXJmbG93LgpmbXVsX21heV91bmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAoJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPiAyLmI/CglmYmd0LncJCWZtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglmYmx0LncJCWZtdWxfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAoKIwojIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAyLiBidXQsCiMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMiBvcgojIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAyLiBzbywgcmVkbyB0aGUgZW50aXJlIG9wZXJhdGlvbgojIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZCByZXN1bHQgaXMuCiMgdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCiMKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wZXJhbmQKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCglvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgUloKCglmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8IDwgMi5iPwoJZmJnZS53CQlmbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJYnJhLncJCWZtdWxfdW5mbAkJIyB5ZXMsIHVuZGVyZmxvdyBvY2N1cnJlZAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBNdWx0aXBseTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PwojCmZtdWxfbm90X25vcm06Cgltb3YudwkJKHRibF9mbXVsX29wLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2ZtdWxfb3AuYiwlcGMsJWQxLncpCgoJc3diZWcJCSY0OAp0YmxfZm11bF9vcDoKCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBOT1JNCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBRTkFOCglzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggTk9STQoJc2hvcnQJCWZtdWxfemVybwktIHRibF9mbXVsX29wICMgWkVSTyB4IFpFUk8KCXNob3J0CQlmbXVsX3Jlc19vcGVycgktIHRibF9mbXVsX29wICMgWkVSTyB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBRTkFOCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggREVOT1JNCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgWkVSTyB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF9pbmZfZHN0CS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBOT1JNCglzaG9ydAkJZm11bF9yZXNfb3BlcnIJLSB0YmxfZm11bF9vcCAjIElORiB4IFpFUk8KCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIElORiB4IFFOQU4KCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IERFTk9STQoJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIElORiB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IE5PUk0KCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggWkVSTwoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBJTkYKCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggUU5BTgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBERU5PUk0KCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggU05BTgoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoKCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBOT1JNCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBRTkFOCglzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IE5PUk0KCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggWkVSTwoJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBJTkYKCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggUU5BTgoJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBERU5PUk0KCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggU05BTgoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoKZm11bF9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCmZtdWxfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZm11bF9yZXNfcW5hbjoKCWJyYS5sCQlyZXNfcW5hbgoKIwojIE11bHRpcGx5OiAoWmVybyB4IFplcm8pIHx8IChaZXJvIHggbm9ybSkgfHwgKFplcm8geCBkZW5vcm0pCiMKCWdsb2JhbAkJZm11bF96ZXJvCQkjIGdsb2JhbCBmb3IgZnNnbG11bApmbXVsX3plcm86Cgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKCWVvci5iCQklZDAsJWQxCglicGwuYgkJZm11bF96ZXJvX3AJCSMgcmVzdWx0IFpFUk8gaXMgcG9zLgpmbXVsX3plcm9fbjoKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIGxvYWQgLVpFUk8KCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IFovTgoJcnRzCmZtdWxfemVyb19wOgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCiMKIyBNdWx0aXBseTogKGluZiB4IGluZikgfHwgKGluZiB4IG5vcm0pIHx8IChpbmYgeCBkZW5vcm0pCiMKIyBOb3RlOiBUaGUgai1iaXQgZm9yIGFuIGluZmluaXR5IGlzIGEgZG9uJ3QtY2FyZS4gSG93ZXZlciwgdG8gYmUKIyBzdHJpY3RseSBjb21wYXRpYmxlIHcvIHRoZSA2ODg4MS84ODIsIHdlIG1ha2Ugc3VyZSB0byByZXR1cm4gYW4KIyBJTkYgdy8gdGhlIGotYml0IHNldCBpZiB0aGUgaW5wdXQgSU5GIGotYml0IHdhcyBzZXQuIERlc3RpbmF0aW9uCiMgSU5GcyB0YWtlIHByaW9yaXR5LgojCglnbG9iYWwJCWZtdWxfaW5mX2RzdAkJIyBnbG9iYWwgZm9yIGZzZ2xtdWwKZm11bF9pbmZfZHN0OgoJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIElORiByZXN1bHQgaW4gZnAwCgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKCWVvci5iCQklZDAsJWQxCglicGwuYgkJZm11bF9pbmZfZHN0X3AJCSMgcmVzdWx0IElORiBpcyBwb3MuCmZtdWxfaW5mX2RzdF9uOgoJZmFicy54CQklZnAwCQkJIyBjbGVhciByZXN1bHQgc2lnbgoJZm5lZy54CQklZnAwCQkJIyBzZXQgcmVzdWx0IHNpZ24KCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL04KCXJ0cwpmbXVsX2luZl9kc3RfcDoKCWZhYnMueAkJJWZwMAkJCSMgY2xlYXIgcmVzdWx0IHNpZ24KCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKCXJ0cwoKCWdsb2JhbAkJZm11bF9pbmZfc3JjCQkjIGdsb2JhbCBmb3IgZnNnbG11bApmbXVsX2luZl9zcmM6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gSU5GIHJlc3VsdCBpbiBmcDAKCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJwbC5iCQlmbXVsX2luZl9kc3RfcAkJIyByZXN1bHQgSU5GIGlzIHBvcy4KCWJyYS5iCQlmbXVsX2luZl9kc3RfbgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZmluKCk6IGVtdWxhdGVzIHRoZSBmbW92ZSBpbnN0cnVjdGlvbgkJCQkjCiMJZnNpbigpOiBlbXVsYXRlcyB0aGUgZnNtb3ZlIGluc3RydWN0aW9uCQkJCSMKIwlmZGluKCk6IGVtdWxhdGVzIHRoZSBmZG1vdmUgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpIC0gbm9ybWFsaXplIG1hbnRpc3NhIGZvciBFWE9QIG9uIGRlbm9ybQkJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCiMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWQwID0gcm91bmQgcHJlYy9tb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCiMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCiMJTm9ybXMgY2FuIGJlIGVtdWxhdGVkIHcvIGEgcmVndWxhciBmbW92ZSBpbnN0cnVjdGlvbi4gRm9yCSMKIyBzZ2wvZGJsLCBtdXN0IHNjYWxlIGV4cG9uZW50IGFuZCBwZXJmb3JtIGFuICJmbW92ZSIuIENoZWNrIHRvIHNlZQkjCiMgaWYgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIG92ZXJmbG93ZWQvdW5kZXJmbG93ZWQuIElmIHNvLCB1c2UgdW5mX3JlcygpCSMKIyBvciBvdmZfcmVzKCkgdG8gcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4gQWxzbyByZXR1cm4gRVhPUCBpZgkjCiMgZXhjZXB0aW9uIGlzIGVuYWJsZWQuIElmIG5vIGV4Y2VwdGlvbiwgcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4JIwojCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZnNpbgpmc2luOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KCWJyYS5iCQlmaW4KCglnbG9iYWwJCWZkaW4KZmRpbjoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlY2lzaW9uCgoJZ2xvYmFsCQlmaW4KZmluOgoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbwoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCQkjIGZldGNoIHNyYyBvcHR5cGUgdGFnCglibmUudwkJZmluX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgRlAgTU9WRSBJTjogTk9STXMgYW5kIERFTk9STXMgT05MWSEKIwpmaW5fbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS53CQlmaW5fbm90X2V4dAkJIyBubywgc28gZ28gaGFuZGxlIGRibCBvciBzZ2wKCiMKIyBwcmVjaXNpb24gc2VsZWN0ZWQgaXMgZXh0ZW5kZWQuIHNvLi4ud2UgY2Fubm90IGdldCBhbiB1bmRlcmZsb3cKIyBvciBvdmVyZmxvdyBiZWNhdXNlIG9mIHJvdW5kaW5nIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4gc28uLi4KIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KIwoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIHRoZSBvcGVyYW5kIG5lZ2F0aXZlPwoJYnBsLmIJCWZpbl9ub3JtX2RvbmUJCSMgbm8KCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHllcywgc28gc2V0ICdOJyBjY29kZSBiaXQKZmluX25vcm1fZG9uZToKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKIwpmaW5fZGVub3JtOgoJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLncJCWZpbl9ub3RfZXh0CQkjIG5vLCBzbyBnbyBoYW5kbGUgZGJsIG9yIHNnbAoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIHRoZSBvcGVyYW5kIG5lZ2F0aXZlPwoJYnBsLmIJCWZpbl9kZW5vcm1fZG9uZQkJIyBubwoJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgeWVzLCBzbyBzZXQgJ04nIGNjb2RlIGJpdApmaW5fZGVub3JtX2RvbmU6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBVTkZMIGVuYWJsZWQ/CglibmUuYgkJZmluX2Rlbm9ybV91bmZsX2VuYQkjIHllcwoJcnRzCgojCiMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCiMgbm9ybWFsaXplIHRoZSBtYW50aXNzYSBhbmQgYWRkIHRoZSBiaWFzIG9mIDB4NjAwMCB0byB0aGUgcmVzdWx0aW5nIG5lZ2F0aXZlCiMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCiMKZmluX2Rlbm9ybV91bmZsX2VuYToKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHJlc3VsdAoJbmVnLncJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50Cgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIG9sZCBzaWduLGV4cAoJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIG9sZCBzaWduCglhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBuZXcgZXhvLG9sZCBzaWduCgltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJcnRzCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBvciBkb3VibGUgcHJlY2lzaW9uCiMKZmluX25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS5iCQlmaW5fZGJsCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KIwpmaW5fc2dsOgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KCWJnZS53CQlmaW5fc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZpbl9zZF9tYXlfb3ZmbAkJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmaW5fc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoKIwojIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW50byB0aGUgZnAgcmVnIGZpbGUKIwpmaW5fc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG1vdmUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgpmaW5fc2Rfbm9ybWFsX2V4aXQ6Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0Cgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHBvbmVudAoJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KIwpmaW5fZGJsOgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KCWJnZS53CQlmaW5fc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZpbl9zZF9tYXlfb3ZmbAkJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmaW5fc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoJYnJhLncJCWZpbl9zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCgojCiMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCiMKZmluX3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgl0c3QuYgkJRlBfU0NSMF9FWCglYTYpCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglicGwuYgkJZmluX3NkX3VuZmxfdHN0Cglic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAoKIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB0aGVuIGdvIGNhbGN1bGF0ZSB0aGUgRVhPUCBmaXJzdC4KZmluX3NkX3VuZmxfdHN0OgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmaW5fc2RfdW5mbF9lbmEJCSMgeWVzCgpmaW5fc2RfdW5mbF9kaXM6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgdW5mX3JlcyBtYXkgaGF2ZSBzZXQgJ1onCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLgojIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KIwpmaW5fc2RfdW5mbF9lbmE6Cgltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQoJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBjdXJyZW50IGV4cG9uZW50CgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CglhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMgZXh0cmFjdCBvbGQgc2lnbgoJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQyLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJYnJhLmIJCWZpbl9zZF91bmZsX2RpcwoKIwojIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KIwpmaW5fc2Rfb3ZmbDoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBtb3ZlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZmluX3NkX292ZmxfdHN0OgoJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZmluX3NkX292ZmxfZW5hCQkjIHllcwoKIwojIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CiMgY2FsbGluZyBvdmZfcmVzKCkuCiMKZmluX3NkX292ZmxfZGlzOgoJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPwoJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQoJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBPVkZMIGlzIGVuYWJsZWQuCiMgdGhlIElORVgyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgdGhlIHJvdW5kIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4KIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCiMKZmluX3NkX292ZmxfZW5hOgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglzdWIubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmaW5fc2Rfb3ZmbF9kaXMKCiMKIyB0aGUgbW92ZSBpbiBNQVkgb3ZlcmZsb3cuIHNvLi4uCiMKZmluX3NkX21heV9vdmZsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIHRoZSBtb3ZlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CglmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CglmYmdlLncJCWZpbl9zZF9vdmZsX3RzdAkJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZmluX3NkX25vcm1hbF9leGl0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIG9wZXJhbmQgaXMgbm90IGEgTk9STTogY2hlY2sgaXRzIG9wdHlwZSBhbmQgYnJhbmNoIGFjY29yZGluZ2x5CiMKZmluX25vdF9ub3JtOgoJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KCWJlcS53CQlmaW5fZGVub3JtCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOcwoJYmVxLmwJCXJlc19zbmFuXzFvcAoJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTnMKCWJlcS5sCQlyZXNfcW5hbl8xb3AKCiMKIyBkbyB0aGUgZm1vdmUgaW47IGF0IHRoaXMgcG9pbnQsIG9ubHkgcG9zc2libGUgb3BzIGFyZSBaRVJPIGFuZCBJTkYuCiMgdXNlIGZtb3YgdG8gZGV0ZXJtaW5lIGNjb2Rlcy4KIyBwcmVjOm1vZGUgc2hvdWxkIGJlIHplcm8gYXQgdGhpcyBwb2ludCBidXQgaXQgd29uJ3QgYWZmZWN0IGFuc3dlciBhbnl3YXlzLgojCglmbW92LngJCVNSQyglYTApLCVmcDAJCSMgZG8gZm1vdmUgaW4KCWZtb3YubAkJJWZwc3IsJWQwCQkjIG5vIGV4Y2VwdGlvbnMgcG9zc2libGUKCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZkaXYoKTogZW11bGF0ZXMgdGhlIGZkaXYgaW5zdHJ1Y3Rpb24JCQkJIwojCWZzZGl2KCk6IGVtdWxhdGVzIHRoZSBmc2RpdiBpbnN0cnVjdGlvbgkJCQkjCiMJZmRkaXYoKTogZW11bGF0ZXMgdGhlIGZkZGl2IGluc3RydWN0aW9uCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIwojCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIwojCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCiMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIwojCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKIwlyZXNfc25hbigpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCiMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSByZXN1bHQJCQkJCQkJIwojCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCiMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgZGl2aWRlCSMKIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmZGl2IHRvCQkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglhbGlnbgkJMHgxMAp0YmxfZmRpdl91bmZsOgoJbG9uZwkJMHgzZmZmIC0gMHgwMDAwCQkjIGV4dF91bmZsCglsb25nCQkweDNmZmYgLSAweDNmODEJCSMgc2dsX3VuZmwKCWxvbmcJCTB4M2ZmZiAtIDB4M2MwMQkJIyBkYmxfdW5mbAoKdGJsX2ZkaXZfb3ZmbDoKCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHQgb3ZlcmZsb3cgZXhwb25lbnQKCWxvbmcJCTB4M2ZmZiAtIDB4NDA3ZQkJIyBzZ2wgb3ZlcmZsb3cgZXhwb25lbnQKCWxvbmcJCTB4M2ZmZiAtIDB4NDNmZQkJIyBkYmwgb3ZlcmZsb3cgZXhwb25lbnQKCglnbG9iYWwJCWZzZGl2CmZzZGl2OgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCglicmEuYgkJZmRpdgoKCWdsb2JhbAkJZmRkaXYKZmRkaXY6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZkaXYKZmRpdjoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCglibmUudwkJZmRpdl9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIERJVklERTogTk9STXMgYW5kIERFTk9STXMgT05MWSEKIwpmZGl2X25vcm06Cgltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQoKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAoKCW5lZy5sCQkoJXNwKQkJCSMgU0NBTEUgRkFDVE9SID0gc2NhbGUxIC0gc2NhbGUyCglhZGQubAkJJWQwLCglc3ApCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uCglsc3IuYgkJJjB4NiwlZDEJCSMgc2hpZnQgdG8gbG8gYml0cwoJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCgljbXAubAkJJWQwLCh0YmxfZmRpdl9vdmZsLmIsJXBjLCVkMS53KjQpICMgd2lsbCByZXN1bHQgb3ZlcmZsb3c/CglibGUudwkJZmRpdl9tYXlfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdwoKCWNtcC5sCQklZDAsKHRibF9mZGl2X3VuZmwudywlcGMsJWQxLncqNCkgIyB3aWxsIHJlc3VsdCB1bmRlcmZsb3c/CgliZXEudwkJZmRpdl9tYXlfdW5mbAkJIyBtYXliZQoJYmd0LncJCWZkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCmZkaXZfbm9ybWFsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2F2ZSBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGRpdmlkZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZkaXZfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSByZXN1bHQgb24gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHN0b3JlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKdGJsX2ZkaXZfb3ZmbDI6Cglsb25nCQkweDdmZmYKCWxvbmcJCTB4NDA3ZgoJbG9uZwkJMHg0M2ZmCgpmZGl2X25vX292Zmw6Cgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNjYWxlIGZhY3RvcgoJYnJhLmIJCWZkaXZfbm9ybWFsX2V4aXQKCmZkaXZfbWF5X292Zmw6Cgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvcgoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgc2V0IEZQU1IKCglmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKCglmbW92LmwJCSVmcHNyLCVkMAoJZm1vdi5sCQkmMHgwLCVmcGNyCgoJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYLE4KCglmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCW1vdi53CQkoJXNwKSwlZDAJCSMgZmV0Y2ggbmV3IGV4cG9uZW50CglhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgcmVzdWx0IGZyb20gc3RhY2sKCWFuZGkubAkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSglc3ApLCVkMAkJIyBhZGQgc2NhbGUgZmFjdG9yCgljbXAubAkJJWQwLCh0YmxfZmRpdl9vdmZsMi5iLCVwYywlZDEudyo0KQoJYmx0LmIJCWZkaXZfbm9fb3ZmbAoJbW92LmwJCSglc3ApKywlZDAKCmZkaXZfb3ZmbF90c3Q6Cglvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmZGl2X292ZmxfZW5hCQkjIHllcwoKZmRpdl9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCmZkaXZfb3ZmbF9lbmE6Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUuYgkJZmRpdl9vdmZsX2VuYV9zZAkjIG5vLCBkbyBzZ2wgb3IgZGJsCgpmZGl2X292ZmxfZW5hX2NvbnQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmZGl2X292ZmxfZGlzCgpmZGl2X292ZmxfZW5hX3NkOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCgoJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWJyYS5iCQlmZGl2X292ZmxfZW5hX2NvbnQKCmZkaXZfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmZGl2X3VuZmxfZW5hCQkjIHllcwoKZmRpdl91bmZsX2RpczoKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIG1heSBoYXZlIGJlZW4gc2V0CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBVTkZMIGlzIGVuYWJsZWQuCiMKZmRpdl91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZkaXZfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKZmRpdl91bmZsX2VuYV9jb250OgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBkaXZpZGUKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQoJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CglhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b2VyCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEudwkJZmRpdl91bmZsX2RpcwoKZmRpdl91bmZsX2VuYV9zZDoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCglmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgoKCWJyYS5iCQlmZGl2X3VuZmxfZW5hX2NvbnQKCiMKIyB0aGUgZGl2aWRlIG9wZXJhdGlvbiBNQVkgdW5kZXJmbG93OgojCmZkaXZfbWF5X3VuZmw6CglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID4gMS5iPwoJZmJndC53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJZmJsdC53CQlmZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKCiMKIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMS4gYnV0LAojIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDEKIyBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMS4gc28sIHJlZG8gdGhlIGVudGlyZQojIG9wZXJhdGlvbiB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQKIyByZXN1bHQgaXMuIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgojCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBSWgoKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGRpdmlkZQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8IDwgMS5iPwoJZmJnZS53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJYnJhLncJCWZkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIERpdmlkZTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PwojCmZkaXZfbm90X25vcm06Cgltb3YudwkJKHRibF9mZGl2X29wLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2ZkaXZfb3AuYiwlcGMsJWQxLncqMSkKCglzd2JlZwkJJjQ4CnRibF9mZGl2X29wOgoJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgTk9STSAvIE5PUk0KCXNob3J0CQlmZGl2X2luZl9sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gWkVSTwoJc2hvcnQJCWZkaXZfemVyb19sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gSU5GCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgTk9STSAvIFFOQU4KCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBERU5PUk0KCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIE5PUk0KCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgWkVSTyAvIFpFUk8KCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIElORgoJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBRTkFOCglzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBERU5PUk0KCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X2luZl9kc3QJLSB0YmxfZmRpdl9vcCAjIElORiAvIE5PUk0KCXNob3J0CQlmZGl2X2luZl9kc3QJLSB0YmxfZmRpdl9vcCAjIElORiAvIFpFUk8KCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgSU5GIC8gSU5GCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgSU5GIC8gUU5BTgoJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gREVOT1JNCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgSU5GIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gTk9STQoJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBaRVJPCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIElORgoJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBRTkFOCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIERFTk9STQoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBTTkFOCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCgoJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgREVOT1JNIC8gTk9STQoJc2hvcnQJCWZkaXZfaW5mX2xvYWQJLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFpFUk8KCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgREVOT1JNIC8gSU5GCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgREVOT1JNIC8gUU5BTgoJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgREVOT1JNIC8gREVOT1JNCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgREVOT1JNIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gTk9STQoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBaRVJPCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIElORgoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBRTkFOCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIERFTk9STQoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBTTkFOCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCgpmZGl2X3Jlc19xbmFuOgoJYnJhLmwJCXJlc19xbmFuCmZkaXZfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZmRpdl9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCgoJZ2xvYmFsCQlmZGl2X3plcm9fbG9hZAkJIyBnbG9iYWwgZm9yIGZzZ2xkaXYKZmRpdl96ZXJvX2xvYWQ6Cgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIHJlc3VsdCBzaWduIGlzIGV4Y2x1c2l2ZQoJbW92LmIJCURTVF9FWCglYTEpLCVkMQkJIyBvciBvZiBpbnB1dCBzaWducy4KCWVvci5iCQklZDAsJWQxCglicGwuYgkJZmRpdl96ZXJvX2xvYWRfcAkjIHJlc3VsdCBpcyBwb3NpdGl2ZQoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgbG9hZCBhIC1aRVJPCgltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL04KCXJ0cwpmZGl2X3plcm9fbG9hZF9wOgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCBhICtaRVJPCgltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKCXJ0cwoKIwojIFRoZSBkZXN0aW5hdGlvbiB3YXMgSW4gUmFuZ2UgYW5kIHRoZSBzb3VyY2Ugd2FzIGEgWkVSTy4gVGhlIHJlc3VsdCwKIyB0aGVyZWZvcmUsIGlzIGFuIElORiB3LyB0aGUgcHJvcGVyIHNpZ24uCiMgU28sIGRldGVybWluZSB0aGUgc2lnbiBhbmQgcmV0dXJuIGEgbmV3IElORiAody8gdGhlIGotYml0IGNsZWFyZWQpLgojCglnbG9iYWwJCWZkaXZfaW5mX2xvYWQJCSMgZ2xvYmFsIGZvciBmc2dsZGl2CmZkaXZfaW5mX2xvYWQ6CglvcmkudwkJJmR6X21hc2srYWR6X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIG5vOyBzZXQgRFovQURaCgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGxvYWQgYm90aCBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJwbC5iCQlmZGl2X2luZl9sb2FkX3AJCSMgcmVzdWx0IGlzIHBvc2l0aXZlCglmbW92LnMJCSYweGZmODAwMDAwLCVmcDAJIyBtYWtlIHJlc3VsdCAtSU5GCgltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9OCglydHMKZmRpdl9pbmZfbG9hZF9wOgoJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgbWFrZSByZXN1bHQgK0lORgoJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgoJcnRzCgojCiMgVGhlIGRlc3RpbmF0aW9uIHdhcyBhbiBJTkYgdy8gYW4gSW4gUmFuZ2Ugb3IgWkVSTyBzb3VyY2UsIHRoZSByZXN1bHQgaXMKIyBhbiBJTkYgdy8gdGhlIHByb3BlciBzaWduLgojIFRoZSA2ODg4MS84ODIgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gSU5GIHcvIHRoZSBuZXcgc2lnbihpZiB0aGUgai1iaXQgb2YgdGhlCiMgZHN0IElORiBpcyBzZXQsIHRoZW4gdGhlbiBqLWJpdCBvZiB0aGUgcmVzdWx0IElORiBpcyBhbHNvIHNldCkuCiMKCWdsb2JhbAkJZmRpdl9pbmZfZHN0CQkjIGdsb2JhbCBmb3IgZnNnbGRpdgpmZGl2X2luZl9kc3Q6Cgltb3YuYgkJRFNUX0VYKCVhMSksJWQwCQkjIGxvYWQgYm90aCBzaWducwoJbW92LmIJCVNSQ19FWCglYTApLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJwbC5iCQlmZGl2X2luZl9kc3RfcAkJIyByZXN1bHQgaXMgcG9zaXRpdmUKCglmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJZmFicy54CQklZnAwCQkJIyBjbGVhciBzaWduIGJpdAoJZm5lZy54CQklZnAwCQkJIyBzZXQgc2lnbiBiaXQKCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRwoJcnRzCgpmZGl2X2luZl9kc3RfcDoKCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCglmYWJzLngJCSVmcDAJCQkjIHJldHVybiBwb3NpdGl2ZSBJTkYKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZm5lZygpOiBlbXVsYXRlcyB0aGUgZm5lZyBpbnN0cnVjdGlvbgkJCQkjCiMJZnNuZWcoKTogZW11bGF0ZXMgdGhlIGZzbmVnIGluc3RydWN0aW9uCQkJCSMKIwlmZG5lZygpOiBlbXVsYXRlcyB0aGUgZmRuZWcgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpIC0gbm9ybWFsaXplIGEgZGVub3JtIHRvIHByb3ZpZGUgRVhPUAkJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc2dsL2RibCBzb3VyY2UgZXhwb25lbnQJCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCiMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWQwID0gcm5kIHByZWMsbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgemVyb2VzLCBhbmQgaW5maW5pdGllcyBhcyBzcGVjaWFsIGNhc2VzLiBTZXBhcmF0ZQkjCiMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbnMuIEV4dGVuZGVkIHByZWNpc2lvbiBjYW4gYmUJIwojIGVtdWxhdGVkIGJ5IHNpbXBseSBzZXR0aW5nIHNpZ24gYml0LiBTZ2wvZGJsIG9wZXJhbmRzIG11c3QgYmUgc2NhbGVkCSMKIyBhbmQgYW4gYWN0dWFsIGZuZWcgcGVyZm9ybWVkIHRvIHNlZSBpZiBvdmVyZmxvdy91bmRlcmZsb3cgd291bGQgaGF2ZQkjCiMgb2NjdXJyZWQuIElmIHNvLCByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cvb3ZlcmZsb3cgcmVzdWx0LiBFbHNlLAkjCiMgc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuIHJlc3VsdC4gRlBTUiBnZXRzIHNldCBiYXNlZCBvbgkjCiMgdGhlIHJlc3VsdCB2YWx1ZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlmc25lZwpmc25lZzoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlY2lzaW9uCglicmEuYgkJZm5lZwoKCWdsb2JhbAkJZmRuZWcKZmRuZWc6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZuZWcKZm5lZzoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCW1vdi5iCQlTVEFHKCVhNiksJWQxCglibmUudwkJZm5lZ19ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIE5FR0FURSBTSUdOIDogbm9ybXMgYW5kIGRlbm9ybXMgT05MWSEKIwpmbmVnX25vcm06CglhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUudwkJZm5lZ19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAoKIwojIHByZWNpc2lvbiBzZWxlY3RlZCBpcyBleHRlbmRlZC4gc28uLi53ZSBjYW4gbm90IGdldCBhbiB1bmRlcmZsb3cKIyBvciBvdmVyZmxvdyBiZWNhdXNlIG9mIHJvdW5kaW5nIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4gc28uLi4KIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KIwoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJbW92LncJCVNSQ19FWCglYTApLCVkMAoJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgoJYnBsLmIJCWZuZWdfbm9ybV9sb2FkCQkjIHNpZ24gaXMgcG9zaXRpdmUKCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CmZuZWdfbm9ybV9sb2FkOgoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKIwpmbmVnX2Rlbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmbmVnX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgoJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CgoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJbW92LncJCVNSQ19FWCglYTApLCVkMAoJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgoJYnBsLmIJCWZuZWdfZGVub3JtX2RvbmUJIyBubwoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgeWVzLCBzZXQgJ04nIGNjb2RlIGJpdApmbmVnX2Rlbm9ybV9kb25lOgoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCglidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIFVORkwgZW5hYmxlZD8KCWJuZS5iCQlmbmVnX2V4dF91bmZsX2VuYQkjIHllcwoJcnRzCgojCiMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCiMgbm9ybWFsaXplIHRoZSBtYW50aXNzYSBhbmQgYWRkIHRoZSBiaWFzIG9mIDB4NjAwMCB0byB0aGUgcmVzdWx0aW5nIG5lZ2F0aXZlCiMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCiMKZm5lZ19leHRfdW5mbF9lbmE6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKCW5lZy53CQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCglhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBvbGQgc2lnbgoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCglvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKIwojIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKIwpmbmVnX25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS5iCQlmbmVnX2RibAoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCiMKZm5lZ19zZ2w6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLncJCWZuZWdfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZuZWdfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmbmVnX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCiMKIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWcgZmlsZQojCmZuZWdfc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZuZWcueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG5lZ2F0aW9uCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZm5lZ19zZF9ub3JtYWxfZXhpdDoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCiMKZm5lZ19kYmw6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLmIJCWZuZWdfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZuZWdfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmbmVnX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCWJyYS53CQlmbmVnX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKCiMKIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKIwpmbmVnX3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgllb3JpLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIG5lZ2F0ZSBzaWduCglicGwuYgkJZm5lZ19zZF91bmZsX3RzdAoJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCiMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCmZuZWdfc2RfdW5mbF90c3Q6Cgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZuZWdfc2RfdW5mbF9lbmEJIyB5ZXMKCmZuZWdfc2RfdW5mbF9kaXM6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgdW5mX3JlcyBtYXkgaGF2ZSBzZXQgJ1onCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgaXMgZW5hYmxlZC4KIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCiMKZm5lZ19zZF91bmZsX2VuYToKCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJRlBfU0NSMF9MTyglYTYpLEZQX1NDUjFfTE8oJWE2KQoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHAKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJYnJhLmIJCWZuZWdfc2RfdW5mbF9kaXMKCiMKIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCiMKZm5lZ19zZF9vdmZsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZuZWcueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG5lZ2F0aW9uCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZm5lZ19zZF9vdmZsX3RzdDoKCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZuZWdfc2Rfb3ZmbF9lbmEJIyB5ZXMKCiMKIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQojIGNhbGxpbmcgb3ZmX3JlcygpLgojCmZuZWdfc2Rfb3ZmbF9kaXM6CglidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CglzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIE9WRkwgaXMgZW5hYmxlZC4KIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgojIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KIwpmbmVnX3NkX292ZmxfZW5hOgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCWJyYS5iCQlmbmVnX3NkX292ZmxfZGlzCgojCiMgdGhlIG1vdmUgaW4gTUFZIHVuZGVyZmxvdy4gc28uLi4KIwpmbmVnX3NkX21heV9vdmZsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZuZWcueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG5lZ2F0aW9uCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CglmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CglmYmdlLncJCWZuZWdfc2Rfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZm5lZ19zZF9ub3JtYWxfZXhpdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KIwpmbmVnX25vdF9ub3JtOgoJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KCWJlcS53CQlmbmVnX2Rlbm9ybQoJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgoJYmVxLmwJCXJlc19zbmFuXzFvcAoJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTgoJYmVxLmwJCXJlc19xbmFuXzFvcAoKIwojIGRvIHRoZSBmbmVnOyBhdCB0aGlzIHBvaW50LCBvbmx5IHBvc3NpYmxlIG9wcyBhcmUgWkVSTyBhbmQgSU5GLgojIHVzZSBmbmVnIHRvIGRldGVybWluZSBjY29kZXMuCiMgcHJlYzptb2RlIHNob3VsZCBiZSB6ZXJvIGF0IHRoaXMgcG9pbnQgYnV0IGl0IHdvbid0IGFmZmVjdCBhbnN3ZXIgYW55d2F5cy4KIwoJZm5lZy54CQlTUkNfRVgoJWEwKSwlZnAwCSMgZG8gZm5lZwoJZm1vdi5sCQklZnBzciwlZDAKCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZ0c3QoKTogZW11bGF0ZXMgdGhlIGZ0ZXN0IGluc3RydWN0aW9uCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXJlc3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgaW5zdHJ1Y3Rpb24JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQ2hlY2sgdGhlIHNvdXJjZSBvcGVyYW5kIHRhZyAoU1RBRykgYW5kIHNldCB0aGUgRlBDUiBhY2NvcmRpbmcJIwojIHRvIHRoZSBvcGVyYW5kIHR5cGUgYW5kIHNpZ24uCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlmdHN0CmZ0c3Q6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYm5lLmIJCWZ0c3Rfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKCiMKIyBOb3JtOgojCmZ0c3Rfbm9ybToKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPwoJYm1pLmIJCWZ0c3Rfbm9ybV9tCQkjIHllcwoJcnRzCmZ0c3Rfbm9ybV9tOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCXJ0cwoKIwojIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PwojCmZ0c3Rfbm90X25vcm06CgljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCgliZXEuYgkJZnRzdF96ZXJvCgljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgoJYmVxLmIJCWZ0c3RfaW5mCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCgliZXEubAkJcmVzX3NuYW5fMW9wCgljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCgliZXEubAkJcmVzX3FuYW5fMW9wCgojCiMgRGVub3JtOgojCmZ0c3RfZGVub3JtOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglibWkuYgkJZnRzdF9kZW5vcm1fbQkJIyB5ZXMKCXJ0cwpmdHN0X2Rlbm9ybV9tOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCXJ0cwoKIwojIEluZmluaXR5OgojCmZ0c3RfaW5mOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglibWkuYgkJZnRzdF9pbmZfbQkJIyB5ZXMKZnRzdF9pbmZfcDoKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CglydHMKZnRzdF9pbmZfbToKCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ0knLCdOJyBjY29kZSBiaXRzCglydHMKCiMKIyBaZXJvOgojCmZ0c3RfemVybzoKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPwoJYm1pLmIJCWZ0c3RfemVyb19tCQkjIHllcwpmdHN0X3plcm9fcDoKCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAoJcnRzCmZ0c3RfemVyb19tOgoJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZpbnQoKTogZW11bGF0ZXMgdGhlIGZpbnQgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlkMCA9IHJvdW5kIHByZWNpc2lvbi9tb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSByZXN1bHQJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2VwYXJhdGUgYWNjb3JkaW5nIHRvIG9wZXJhbmQgdHlwZS4gVW5ub3JtcyBkb24ndCBwYXNzIHRocm91Z2gJIwojIGhlcmUuIEZvciBub3JtcywgbG9hZCB0aGUgcm91bmRpbmcgbW9kZS9wcmVjLCBleGVjdXRlIGEgImZpbnQiLCB0aGVuCSMKIyBzdG9yZSB0aGUgcmVzdWx0aW5nIEZQU1IgYml0cy4JCQkJCSMKIwlGb3IgZGVub3JtcywgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lIGFuZCBkbyB0aGUgc2FtZSBhcyBmb3IJIwojIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKIyBvbmUuCQkJCQkJCQkJIwojCUZvciB6ZXJvZXMvaW5mcy9OQU5zLCByZXR1cm4gdGhlIHNhbWUgd2hpbGUgc2V0dGluZyB0aGUgRlBTUgkjCiMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZmludApmaW50OgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJuZS5iCQlmaW50X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgTm9ybToKIwpmaW50X25vcm06CglhbmRpLmIJCSYweDMwLCVkMAkJIyBzZXQgcHJlYyA9IGV4dAoKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZpbnQueAkJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCglvci5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzZXQgZXhjZXB0aW9uIGJpdHMKCglydHMKCiMKIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KIwpmaW50X25vdF9ub3JtOgoJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTwoJYmVxLmIJCWZpbnRfemVybwoJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKCWJlcS5iCQlmaW50X2luZgoJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KCWJlcS5iCQlmaW50X2Rlbm9ybQoJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgoJYmVxLmwJCXJlc19zbmFuXzFvcAoJYnJhLmwJCXJlc19xbmFuXzFvcAkJIyB3ZWVkIG91dCBRTkFOCgojCiMgRGVub3JtOgojCiMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSBlaXRoZXIgKCsvLSlaRVJPIG9yICgrLy0pMS4KIyBhbHNvLCB0aGUgSU5FWDIgYW5kIEFJTkVYIGV4Y2VwdGlvbiBiaXRzIHdpbGwgYmUgc2V0LgojIHNvLCB3ZSBjb3VsZCBlaXRoZXIgc2V0IHRoZXNlIG1hbnVhbGx5IG9yIGZvcmNlIHRoZSBERU5PUk0KIyB0byBhIHZlcnkgc21hbGwgTk9STSBhbmQgc2hpcCBpdCB0byB0aGUgTk9STSByb3V0aW5lLgojIEkgZG8gdGhlIGxhdHRlci4KIwpmaW50X2Rlbm9ybToKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikgIyBjb3B5IHNpZ24sIHplcm8gZXhwCgltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJyYS5iCQlmaW50X25vcm0KCiMKIyBaZXJvOgojCmZpbnRfemVybzoKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBaRVJPIG5lZ2F0aXZlPwoJYm1pLmIJCWZpbnRfemVyb19tCQkjIHllcwpmaW50X3plcm9fcDoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTyBpbiBmcDAKCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAoJcnRzCmZpbnRfemVyb19tOgoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPIGluIGZwMAoJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCglydHMKCiMKIyBJbmZpbml0eToKIwpmaW50X2luZjoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPwoJYm1pLmIJCWZpbnRfaW5mX20JCSMgeWVzCmZpbnRfaW5mX3A6Cgltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAoJcnRzCmZpbnRfaW5mX206Cgltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmaW50cnooKTogZW11bGF0ZXMgdGhlIGZpbnRyeiBpbnN0cnVjdGlvbgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXJlc197cyxxfW5hbl8xb3AoKSAtIHNldCBOQU4gcmVzdWx0IGZvciBtb25hZGljIG9wZXJhdGlvbgkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24vbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVNlcGFyYXRlIGFjY29yZGluZyB0byBvcGVyYW5kIHR5cGUuIFVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoCSMKIyBoZXJlLiBGb3Igbm9ybXMsIGxvYWQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYywgZXhlY3V0ZSBhICJmaW50cnoiLAkjCiMgdGhlbiBzdG9yZSB0aGUgcmVzdWx0aW5nIEZQU1IgYml0cy4JCQkJCSMKIwlGb3IgZGVub3JtcywgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lIGFuZCBkbyB0aGUgc2FtZSBhcyBmb3IJIwojIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKIyBvbmUuCQkJCQkJCQkJIwojCUZvciB6ZXJvZXMvaW5mcy9OQU5zLCByZXR1cm4gdGhlIHNhbWUgd2hpbGUgc2V0dGluZyB0aGUgRlBTUgkjCiMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZmludHJ6CmZpbnRyejoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCglibmUuYgkJZmludHJ6X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgTm9ybToKIwpmaW50cnpfbm9ybToKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZmludHJ6LngJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnRyegoKCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgoJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2V0IGV4Y2VwdGlvbiBiaXRzCgoJcnRzCgojCiMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CiMKZmludHJ6X25vdF9ub3JtOgoJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTwoJYmVxLmIJCWZpbnRyel96ZXJvCgljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgoJYmVxLmIJCWZpbnRyel9pbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCgliZXEuYgkJZmludHJ6X2Rlbm9ybQoJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgoJYmVxLmwJCXJlc19zbmFuXzFvcAoJYnJhLmwJCXJlc19xbmFuXzFvcAkJIyB3ZWVkIG91dCBRTkFOCgojCiMgRGVub3JtOgojCiMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSAoKy8tKVpFUk8uCiMgYWxzbywgdGhlIElORVgyIGFuZCBBSU5FWCBleGNlcHRpb24gYml0cyB3aWxsIGJlIHNldC4KIyBzbywgd2UgY291bGQgZWl0aGVyIHNldCB0aGVzZSBtYW51YWxseSBvciBmb3JjZSB0aGUgREVOT1JNCiMgdG8gYSB2ZXJ5IHNtYWxsIE5PUk0gYW5kIHNoaXAgaXQgdG8gdGhlIE5PUk0gcm91dGluZS4KIyBJIGRvIHRoZSBsYXR0ZXIuCiMKZmludHJ6X2Rlbm9ybToKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikgIyBjb3B5IHNpZ24sIHplcm8gZXhwCgltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJyYS5iCQlmaW50cnpfbm9ybQoKIwojIFplcm86CiMKZmludHJ6X3plcm86Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgWkVSTyBuZWdhdGl2ZT8KCWJtaS5iCQlmaW50cnpfemVyb19tCQkjIHllcwpmaW50cnpfemVyb19wOgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPIGluIGZwMAoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CglydHMKZmludHJ6X3plcm9fbToKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTyBpbiBmcDAKCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdaJywnTicgY2NvZGUgYml0cwoJcnRzCgojCiMgSW5maW5pdHk6CiMKZmludHJ6X2luZjoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPwoJYm1pLmIJCWZpbnRyel9pbmZfbQkJIyB5ZXMKZmludHJ6X2luZl9wOgoJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdJJyBjY29kZSBiaXQKCXJ0cwpmaW50cnpfaW5mX206Cgltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmYWJzKCk6ICBlbXVsYXRlcyB0aGUgZmFicyBpbnN0cnVjdGlvbgkJCQkjCiMJZnNhYnMoKTogZW11bGF0ZXMgdGhlIGZzYWJzIGluc3RydWN0aW9uCQkJCSMKIwlmZGFicygpOiBlbXVsYXRlcyB0aGUgZmRhYnMgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJbm9ybSgpIC0gbm9ybWFsaXplIGRlbm9ybSBtYW50aXNzYSB0byBwcm92aWRlIEVYT1AJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gbWFrZSBleHBvbmVudC4gPSAwOyBnZXQgc2NhbGUgZmFjdG9yCSMKIwl1bmZfcmVzKCkgLSBjYWxjdWxhdGUgdW5kZXJmbG93IHJlc3VsdAkJCQkjCiMJb3ZmX3JlcygpIC0gY2FsY3VsYXRlIG92ZXJmbG93IHJlc3VsdAkJCQkjCiMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlkMCA9IHJuZCBwcmVjaXNpb24vbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIwojCVNpbXBseSBjbGVhciBzaWduIGZvciBleHRlbmRlZCBwcmVjaXNpb24gbm9ybS4gRXh0IHByZWMgZGVub3JtCSMKIyBnZXRzIGFuIEVYT1AgY3JlYXRlZCBmb3IgaXQgc2luY2UgaXQncyBhbiB1bmRlcmZsb3cuCQkJIwojCURvdWJsZSBhbmQgc2luZ2xlIHByZWNpc2lvbiBjYW4gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdy4gRmlyc3QsCSMKIyBzY2FsZSB0aGUgb3BlcmFuZCBzdWNoIHRoYXQgdGhlIGV4cG9uZW50IGlzIHplcm8uIFBlcmZvcm0gYW4gImZhYnMiCSMKIyB1c2luZyB0aGUgY29ycmVjdCBybmQgbW9kZS9wcmVjLiBDaGVjayB0byBzZWUgaWYgdGhlIG9yaWdpbmFsCQkjCiMgZXhwb25lbnQgd291bGQgdGFrZSBhbiBleGNlcHRpb24uIElmIHNvLCB1c2UgdW5mX3JlcygpIG9yIG92Zl9yZXMoKQkjCiMgdG8gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdC4gQWxzbywgY3JlYXRlIHRoZSBFWE9QIGZvciB0aGUJIwojIGV4Y2VwdGlvbmFsIGNhc2UuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIsIGluc2VydCB0aGUgY29ycmVjdAkjCiMgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4uCQkJCQkJIwojCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZnNhYnMKZnNhYnM6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgoJYnJhLmIJCWZhYnMKCglnbG9iYWwJCWZkYWJzCmZkYWJzOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KCglnbG9iYWwJCWZhYnMKZmFiczoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCW1vdi5iCQlTVEFHKCVhNiksJWQxCglibmUudwkJZmFic19ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIEFCU09MVVRFIFZBTFVFOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQojCmZhYnNfbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmYWJzX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgojCiMgcHJlY2lzaW9uIHNlbGVjdGVkIGlzIGV4dGVuZGVkLiBzby4uLndlIGNhbiBub3QgZ2V0IGFuIHVuZGVyZmxvdwojIG9yIG92ZXJmbG93IGJlY2F1c2Ugb2Ygcm91bmRpbmcgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLiBzby4uLgojIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgojCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YudwkJU1JDX0VYKCVhMCksJWQxCgliY2xyCQkmMTUsJWQxCQkJIyBmb3JjZSBhYnNvbHV0ZSB2YWx1ZQoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKIwpmYWJzX2Rlbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmYWJzX25vdF9leHQJCSMgbm8KCglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YudwkJU1JDX0VYKCVhMCksJWQwCgliY2xyCQkmMTUsJWQwCQkJIyBjbGVhciBzaWduCgltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBleHBvbmVudAoKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCglidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIFVORkwgZW5hYmxlZD8KCWJuZS5iCQlmYWJzX2V4dF91bmZsX2VuYQoJcnRzCgojCiMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCiMgbm9ybWFsaXplIHRoZSBtYW50aXNzYSBhbmQgYWRkIHRoZSBiaWFzIG9mIDB4NjAwMCB0byB0aGUgcmVzdWx0aW5nIG5lZ2F0aXZlCiMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCiMKZmFic19leHRfdW5mbF9lbmE6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKCW5lZy53CQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCglhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBvbGQgc2lnbgoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCglvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKIwojIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKIwpmYWJzX25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS5iCQlmYWJzX2RibAoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCiMKZmFic19zZ2w6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLncJCWZhYnNfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZhYnNfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmYWJzX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCiMKIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWcgZmlsZQojCmZhYnNfc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZhYnMueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZmFic19zZF9ub3JtYWxfZXhpdDoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCiMKZmFic19kYmw6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLmIJCWZhYnNfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZhYnNfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmYWJzX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCWJyYS53CQlmYWJzX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKCiMKIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKIwpmYWJzX3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgliY2xyCQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCgojIGlmIHVuZGVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIGdvIGNhbGN1bGF0ZSBFWE9QIGZpcnN0LgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmYWJzX3NkX3VuZmxfZW5hCSMgeWVzCgpmYWJzX3NkX3VuZmxfZGlzOgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQoJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBwb3NzaWJsZSAnWicgY2NvZGUKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIG9wZXJhbmQgd2lsbCB1bmRlcmZsb3cgQU5EIHVuZGVyZmxvdyBpcyBlbmFibGVkLgojIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KIwpmYWJzX3NkX3VuZmxfZW5hOgoJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglicmEuYgkJZmFic19zZF91bmZsX2RpcwoKIwojIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KIwpmYWJzX3NkX292Zmw6CglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgoJZmFicy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgpmYWJzX3NkX292ZmxfdHN0OgoJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZmFic19zZF9vdmZsX2VuYQkjIHllcwoKIwojIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CiMgY2FsbGluZyBvdmZfcmVzKCkuCiMKZmFic19zZF9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZGTCBpcyBlbmFibGVkLgojIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCiMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgojCmZhYnNfc2Rfb3ZmbF9lbmE6Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQoJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CglhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJYnJhLmIJCWZhYnNfc2Rfb3ZmbF9kaXMKCiMKIyB0aGUgbW92ZSBpbiBNQVkgdW5kZXJmbG93LiBzby4uLgojCmZhYnNfc2RfbWF5X292Zmw6CglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgoJZmFicy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KCWZiZ2UudwkJZmFic19zZF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCgojIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKCWJyYS53CQlmYWJzX3NkX25vcm1hbF9leGl0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PwojCmZhYnNfbm90X25vcm06CgljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQoJYmVxLncJCWZhYnNfZGVub3JtCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCgliZXEubAkJcmVzX3NuYW5fMW9wCgljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCgliZXEubAkJcmVzX3FuYW5fMW9wCgoJZmFicy54CQlTUkMoJWEwKSwlZnAwCQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCgoJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKCWJlcS5iCQlmYWJzX2luZgpmYWJzX3plcm86Cgltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKCXJ0cwpmYWJzX2luZjoKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZjbXAoKTogZnAgY29tcGFyZSBvcCByb3V0aW5lCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCiMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIwojCWQwID0gcm91bmQgcHJlYy9tb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSGFuZGxlIE5BTnMgYW5kIGRlbm9ybXMgYXMgc3BlY2lhbCBjYXNlcy4gRm9yIGV2ZXJ5dGhpbmcgZWxzZSwJIwojIGp1c3QgdXNlIHRoZSBhY3R1YWwgZmNtcCBpbnN0cnVjdGlvbiB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGNvbmRpdGlvbgkjCiMgY29kZXMuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZjbXAKZmNtcDoKCWNsci53CQklZDEKCW1vdi5iCQlEVEFHKCVhNiksJWQxCglsc2wuYgkJJjB4MywlZDEKCW9yLmIJCVNUQUcoJWE2KSwlZDEKCWJuZS5iCQlmY21wX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgQ09NUEFSRSBGUCBPUHMgOiBOT1JNcywgWkVST3MsIElORnMsIGFuZCAiY29ycmVjdGVkIiBERU5PUk1zCiMKZmNtcF9ub3JtOgoJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgbG9hZCBkc3Qgb3AKCglmY21wLngJCSVmcDAsU1JDKCVhMCkJCSMgZG8gY29tcGFyZQoKCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgoJcm9sLmwJCSYweDgsJWQwCQkjIGV4dHJhY3QgY2NvZGUgYml0cwoJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgY2NvZGUgYml0cyhubyBleGMgYml0cyBhcmUgc2V0KQoKCXJ0cwoKIwojIGZjbXA6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KIwpmY21wX25vdF9ub3JtOgoJbW92LncJCSh0YmxfZmNtcF9vcC5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9mY21wX29wLmIsJXBjLCVkMS53KjEpCgoJc3diZWcJCSY0OAp0YmxfZmNtcF9vcDoKCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBOT1JNCglzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gWkVSTwoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgTk9STSAtIElORgoJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBRTkFOCglzaG9ydAkJZmNtcF9ucm1fZG5ybQktIHRibF9mY21wX29wICMgTk9STSAtIERFTk9STQoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBTTkFOCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCgoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgWkVSTyAtIE5PUk0KCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBaRVJPCglzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gSU5GCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgWkVSTyAtIFFOQU4KCXNob3J0CQlmY21wX2Rucm1fcwktIHRibF9mY21wX29wICMgWkVSTyAtIERFTk9STQoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBTTkFOCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCgoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gTk9STQoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gWkVSTwoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gSU5GCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgSU5GIC0gUU5BTgoJc2hvcnQJCWZjbXBfZG5ybV9zCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBERU5PUk0KCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBTTkFOCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCgoJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBOT1JNCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFpFUk8KCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gSU5GCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFFOQU4KCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gREVOT1JNCglzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFNOQU4KCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCglzaG9ydAkJZmNtcF9kbnJtX25ybQktIHRibF9mY21wX29wICMgREVOT1JNIC0gTk9STQoJc2hvcnQJCWZjbXBfZG5ybV9kCS0gdGJsX2ZjbXBfb3AgIyBERU5PUk0gLSBaRVJPCglzaG9ydAkJZmNtcF9kbnJtX2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIElORgoJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFFOQU4KCXNob3J0CQlmY21wX2Rucm1fc2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIERFTk9STQoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCglzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIE5PUk0KCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gWkVSTwoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBJTkYKCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gUU5BTgoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBERU5PUk0KCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gU05BTgoJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIwoJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIwoKIyB1bmxpa2UgYWxsIG90aGVyIGZ1bmN0aW9ucyBmb3IgUU5BTiBhbmQgU05BTiwgZmNtcCBkb2VzIE5PVCBzZXQgdGhlCiMgJ04nIGJpdCBmb3IgYSBuZWdhdGl2ZSBRTkFOIG9yIFNOQU4gaW5wdXQgc28gd2UgbXVzdCBzcXVlbGNoIGl0IGhlcmUuCmZjbXBfcmVzX3FuYW46Cglic3IubAkJcmVzX3FuYW4KCWFuZGkuYgkJJjB4ZjcsRlBTUl9DQyglYTYpCglydHMKZmNtcF9yZXNfc25hbjoKCWJzci5sCQlyZXNfc25hbgoJYW5kaS5iCQkmMHhmNyxGUFNSX0NDKCVhNikKCXJ0cwoKIwojIERFTk9STXMgYXJlIGEgbGl0dGxlIG1vcmUgZGlmZmljdWx0LgojIElmIHlvdSBoYXZlIGEgMiBERU5PUk1zLCB0aGVuIHlvdSBjYW4ganVzdCBmb3JjZSB0aGUgai1iaXQgdG8gYSBvbmUKIyBhbmQgdXNlIHRoZSBmY21wX25vcm0gcm91dGluZS4KIyBJZiB5b3UgaGF2ZSBhIERFTk9STSBhbmQgYW4gSU5GIG9yIFpFUk8sIGp1c3QgZm9yY2UgdGhlIERFTk9STSdzIGotYml0IHRvIGEgb25lCiMgYW5kIHVzZSB0aGUgZmNtcF9ub3JtIHJvdXRpbmUuCiMgSWYgeW91IGhhdmUgYSBERU5PUk0gYW5kIGEgTk9STSB3aXRoIG9wcG9zaXRlIHNpZ25zLCB0aGVuIHVzZSBmY21wX25vcm0sIGFsc28uCiMgQnV0IHdpdGggYSBERU5PUk0gYW5kIGEgTk9STSBvZiB0aGUgc2FtZSBzaWduLCB0aGUgbmVnIGJpdCBpcyBzZXQgaWYgdGhlCiMgKDEpIHNpZ25zIGFyZSAoKykgYW5kIHRoZSBERU5PUk0gaXMgdGhlIGRzdCBvcgojICgyKSBzaWducyBhcmUgKC0pIGFuZCB0aGUgREVOT1JNIGlzIHRoZSBzcmMKIwoKZmNtcF9kbnJtX3M6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksJWQwCglic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAoJYnJhLncJCWZjbXBfbm9ybQoKZmNtcF9kbnJtX2Q6Cgltb3YubAkJRFNUX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksJWQwCglic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMCglYTYpLCVhMQoJYnJhLncJCWZjbXBfbm9ybQoKZmNtcF9kbnJtX3NkOgoJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCURTVF9ISSglYTEpLCVkMAoJYnNldAkJJjMxLCVkMAkJCSMgREVOT1JNIGRzdDsgbWFrZSBpbnRvIHNtYWxsIG5vcm0KCW1vdi5sCQklZDAsRlBfU0NSMV9ISSglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksJWQwCglic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gZHN0OyBtYWtlIGludG8gc21hbGwgbm9ybQoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMSglYTYpLCVhMQoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCglicmEudwkJZmNtcF9ub3JtCgpmY21wX25ybV9kbnJtOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJtaS53CQlmY21wX2Rucm1fcwoKIyBzaWducyBhcmUgdGhlIHNhbWUsIHNvIG11c3QgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgb3Vyc2VsdmVzLgoJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPwoJYm1pLmIJCWZjbXBfbnJtX2Rucm1fbQkJIyB5ZXMKCXJ0cwpmY21wX25ybV9kbnJtX206Cgltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAoJcnRzCgpmY21wX2Rucm1fbnJtOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJtaS53CQlmY21wX2Rucm1fZAoKIyBzaWducyBhcmUgdGhlIHNhbWUsIHNvIG11c3QgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgb3Vyc2VsdmVzLgoJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPwoJYnBsLmIJCWZjbXBfZG5ybV9ucm1fbQkJIyBubwoJcnRzCmZjbXBfZG5ybV9ucm1fbToKCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZzZ2xtdWwoKTogZW11bGF0ZXMgdGhlIGZzZ2xtdWwgaW5zdHJ1Y3Rpb24JCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2NhbGUgZHN0IGV4cG9uZW50IHRvIHplcm8JCSMKIwl1bmZfcmVzNCgpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBmb3Igc2dsb3AJCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIwojCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBtdWx0aXBseQkjCiMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNnbG11bCB0bwkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzZ2xtdWwKZnNnbG11bDoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCgoJYm5lLncJCWZzZ2xtdWxfbm90X25vcm0JIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKZnNnbG11bF9ub3JtOgoJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQoJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQoJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSBleHBvbmVudAoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQoKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAoKCWFkZC5sCQkoJXNwKSssJWQwCQkjIFNDQUxFX0ZBQ1RPUiA9IHNjYWxlMSArIHNjYWxlMgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCSMgd291bGQgcmVzdWx0IG92Zmw/CgliZXEudwkJZnNnbG11bF9tYXlfb3ZmbAkjIHJlc3VsdCBtYXkgcm5kIHRvIG92ZXJmbG93CglibHQudwkJZnNnbG11bF9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CgoJY21waS5sCQklZDAsJjB4M2ZmZisweDAwMDEJIyB3b3VsZCByZXN1bHQgdW5mbD8KCWJlcS53CQlmc2dsbXVsX21heV91bmZsCSMgcmVzdWx0IG1heSBybmQgdG8gbm8gdW5mbAoJYmd0LncJCWZzZ2xtdWxfdW5mbAkJIyByZXN1bHQgd2lsbCB1bmRlcmZsb3cKCmZzZ2xtdWxfbm9ybWFsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzZ2xtdWxfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKZnNnbG11bF9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzZ2xtdWxfb3ZmbF90c3Q6CgojIHNhdmUgc2V0dGluZyB0aGlzIHVudGlsIG5vdyBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgZnNnbG11bF9tYXlfb3ZmbCBtYXkganVtcCBpbgoJb3IubAkJJm92ZmxfaW54X21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzZ2xtdWxfb3ZmbF9lbmEJIyB5ZXMKCmZzZ2xtdWxfb3ZmbF9kaXM6CglidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CglzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgZm9yY2UgcHJlYyA9IGV4dAoJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCmZzZ2xtdWxfb3ZmbF9lbmE6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmc2dsbXVsX292ZmxfZGlzCgpmc2dsbXVsX21heV9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KCWZiZ2UudwkJZnNnbG11bF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCgojIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKCWJyYS53CQlmc2dsbXVsX25vcm1hbF9leGl0Cgpmc2dsbXVsX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmc2dsbXVsX3VuZmxfZW5hCSMgeWVzCgpmc2dsbXVsX3VuZmxfZGlzOgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBVTkZMIGlzIGVuYWJsZWQuCiMKZnNnbG11bF91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjawoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS53CQlmc2dsbXVsX3VuZmxfZGlzCgpmc2dsbXVsX21heV91bmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID4gMi5iPwoJZmJndC53CQlmc2dsbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJZmJsdC53CQlmc2dsbXVsX3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKCiMKIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMi4gYnV0LAojIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDIgb3IKIyBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMi4gc28sIHJlZG8gdGhlIGVudGlyZSBvcGVyYXRpb24KIyB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IGlzLgojIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgojCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBSWgoKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQoJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPCAyLmI/CglmYmdlLncJCWZzZ2xtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglicmEudwkJZnNnbG11bF91bmZsCQkjIHllcywgdW5kZXJmbG93IG9jY3VycmVkCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBTaW5nbGUgUHJlY2lzaW9uIE11bHRpcGx5OiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CiMKZnNnbG11bF9ub3Rfbm9ybToKCW1vdi53CQkodGJsX2ZzZ2xtdWxfb3AuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfZnNnbG11bF9vcC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmNDgKdGJsX2ZzZ2xtdWxfb3A6CglzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IE5PUk0KCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggUU5BTgoJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCgoJc2hvcnQJCWZzZ2xtdWxfemVybwkJLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBOT1JNCglzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IFpFUk8KCXNob3J0CQlmc2dsbXVsX3Jlc19vcGVycgktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IElORgoJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBRTkFOCglzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IERFTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCglzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX29wZXJyCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBaRVJPCglzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggSU5GCglzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgSU5GIHggUU5BTgoJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IERFTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFNOQU4KCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoKCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBaRVJPCglzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IElORgoJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBRTkFOCglzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IERFTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCglzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IE5PUk0KCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggUU5BTgoJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCgoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBOT1JNCglzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFpFUk8KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggSU5GCglzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFFOQU4KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggREVOT1JNCglzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFNOQU4KCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoKZnNnbG11bF9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCmZzZ2xtdWxfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZnNnbG11bF9yZXNfcW5hbjoKCWJyYS5sCQlyZXNfcW5hbgpmc2dsbXVsX3plcm86CglicmEubAkJZm11bF96ZXJvCmZzZ2xtdWxfaW5mX3NyYzoKCWJyYS5sCQlmbXVsX2luZl9zcmMKZnNnbG11bF9pbmZfZHN0OgoJYnJhLmwJCWZtdWxfaW5mX2RzdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnNnbGRpdigpOiBlbXVsYXRlcyB0aGUgZnNnbGRpdiBpbnN0cnVjdGlvbgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIwojCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIwojCXVuZl9yZXM0KCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2xvcAkJIwojCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCiMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIwojCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCiMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIwojCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIGRpdmlkZQkjCiMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNnbGRpdiB0bwkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzZ2xkaXYKZnNnbGRpdjoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCglibmUudwkJZnNnbGRpdl9ub3Rfbm9ybQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgRElWSURFOiBOT1JNcyBhbmQgREVOT1JNcyBPTkxZIQojCmZzZ2xkaXZfbm9ybToKCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvciAxCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvciAxCgoJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvciAyCgoJbmVnLmwJCSglc3ApCQkJIyBTLkYuID0gc2NhbGUxIC0gc2NhbGUyCglhZGQubAkJJWQwLCglc3ApCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uLG1vZGUKCWxzci5iCQkmMHg2LCVkMQoJbW92LmwJCSglc3ApKywlZDAKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCglibGUudwkJZnNnbGRpdl9tYXlfb3ZmbAoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgwMDAwCSMgd2lsbCByZXN1bHQgdW5kZXJmbG93PwoJYmVxLncJCWZzZ2xkaXZfbWF5X3VuZmwJIyBtYXliZQoJYmd0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCmZzZ2xkaXZfbm9ybWFsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2F2ZSBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gc2dsIGRpdmlkZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzZ2xkaXZfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSByZXN1bHQgb24gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJcnRzCgpmc2dsZGl2X21heV9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBzZXQgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCgoJZm1vdi5sCQklZnBzciwlZDEKCWZtb3YubAkJJjB4MCwlZnBjcgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCgoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCgltb3YudwkJKCVzcCksJWQxCQkjIGZldGNoIG5ldyBleHBvbmVudAoJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIHJlc3VsdAoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJY21wLmwJCSVkMSwmMHg3ZmZmCQkjIGRpZCBkaXZpZGUgb3ZlcmZsb3c/CglibHQuYgkJZnNnbGRpdl9ub3JtYWxfZXhpdAoKZnNnbGRpdl9vdmZsX3RzdDoKCW9yLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZnNnbGRpdl9vdmZsX2VuYQkjIHllcwoKZnNnbGRpdl9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZQoJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGtpbGwgcHJlY2lzaW9uCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCmZzZ2xkaXZfb3ZmbF9lbmE6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBtcyBiaXQKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJYnJhLmIJCWZzZ2xkaXZfb3ZmbF9kaXMKCmZzZ2xkaXZfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmc2dsZGl2X3VuZmxfZW5hCSMgeWVzCgpmc2dsZGl2X3VuZmxfZGlzOgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBVTkZMIGlzIGVuYWJsZWQuCiMKZnNnbGRpdl91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIGRpdmlkZQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0Cglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEuYgkJZnNnbGRpdl91bmZsX2RpcwoKIwojIHRoZSBkaXZpZGUgb3BlcmF0aW9uIE1BWSB1bmRlcmZsb3c6CiMKZnNnbGRpdl9tYXlfdW5mbDoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIGRpdmlkZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAoJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPiAxLmI/CglmYmd0LncJCWZzZ2xkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglmYmx0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAoKIwojIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAxLiBidXQsCiMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMQojIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAxLiBzbywgcmVkbyB0aGUgZW50aXJlCiMgb3BlcmF0aW9uIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZAojIHJlc3VsdCBpcy4gdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCiMKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gJWZwMQoKCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnaXN0ZXIKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGZvcmNlIFJaIHJuZCBtb2RlCgoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQoJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPCAxLmI/CglmYmdlLncJCWZzZ2xkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglicmEudwkJZnNnbGRpdl91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgRGl2aWRlOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CiMKZnNnbGRpdl9ub3Rfbm9ybToKCW1vdi53CQkodGJsX2ZzZ2xkaXZfb3AuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfZnNnbGRpdl9vcC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmNDgKdGJsX2ZzZ2xkaXZfb3A6CglzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X2luZl9sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gWkVSTwoJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gSU5GCglzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFFOQU4KCXNob3J0CQlmc2dsZGl2X25vcm0JCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gREVOT1JNCglzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFNOQU4KCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCglzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIwoKCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19vcGVycgktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIFpFUk8KCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIElORgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBRTkFOCglzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gU05BTgoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCgoJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X2luZl9kc3QJCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBaRVJPCglzaG9ydAkJZnNnbGRpdl9yZXNfb3BlcnIJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIElORgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFFOQU4KCXNob3J0CQlmc2dsZGl2X2luZl9kc3QJCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIwoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCglzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gWkVSTwoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBJTkYKCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gUU5BTgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gU05BTgoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCgoJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X2luZl9sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBaRVJPCglzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIElORgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFFOQU4KCXNob3J0CQlmc2dsZGl2X25vcm0JCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIwoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCglzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gWkVSTwoJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBJTkYKCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gUU5BTgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gU05BTgoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCgpmc2dsZGl2X3Jlc19xbmFuOgoJYnJhLmwJCXJlc19xbmFuCmZzZ2xkaXZfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZnNnbGRpdl9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCmZzZ2xkaXZfaW5mX2xvYWQ6CglicmEubAkJZmRpdl9pbmZfbG9hZApmc2dsZGl2X3plcm9fbG9hZDoKCWJyYS5sCQlmZGl2X3plcm9fbG9hZApmc2dsZGl2X2luZl9kc3Q6CglicmEubAkJZmRpdl9pbmZfZHN0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmYWRkKCk6IGVtdWxhdGVzIHRoZSBmYWRkIGluc3RydWN0aW9uCQkJCSMKIwlmc2FkZCgpOiBlbXVsYXRlcyB0aGUgZmFkZCBpbnN0cnVjdGlvbgkJCQkjCiMJZmRhZGQoKTogZW11bGF0ZXMgdGhlIGZkYWRkIGluc3RydWN0aW9uCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWFkZHN1Yl9zY2FsZXIyKCkgLSBzY2FsZSB0aGUgb3BlcmFuZHMgc28gdGhleSB3b24ndCB0YWtlIGV4YwkjCiMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIwojCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCiMJcmVzX3FuYW4oKSAtIHNldCBRTkFOIHJlc3VsdAkJCQkJIwojCXJlc19zbmFuKCkgLSBzZXQgU05BTiByZXN1bHQJCQkJCSMKIwlyZXNfb3BlcnIoKSAtIHNldCBPUEVSUiByZXN1bHQJCQkJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2V0IHNyYyBvcGVyYW5kIGV4cG9uZW50IGVxdWFsIHRvIHplcm8JIwojCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzZXQgZHN0IG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSByZXN1bHQJCQkJCQkJIwojCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKIwlEbyBhZGRpdGlvbiBhZnRlciBzY2FsaW5nIGV4cG9uZW50cyBzdWNoIHRoYXQgZXhjZXB0aW9uIHdvbid0CSMKIyBvY2N1ci4gVGhlbiwgY2hlY2sgcmVzdWx0IGV4cG9uZW50IHRvIHNlZSBpZiBleGNlcHRpb24gd291bGQgaGF2ZQkjCiMgb2NjdXJyZWQuIElmIHNvLCByZXR1cm4gZGVmYXVsdCByZXN1bHQgYW5kIG1heWJlIEVYT1AuIEVsc2UsIGluc2VydAkjCiMgdGhlIGNvcnJlY3QgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4uIFNldCBGUFNSIGJpdHMgYXMgYXBwcm9wcmlhdGUuCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZnNhZGQKZnNhZGQ6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKCWJyYS5iCQlmYWRkCgoJZ2xvYmFsCQlmZGFkZApmZGFkZDoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYwoKCWdsb2JhbAkJZmFkZApmYWRkOgoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbwoKCWNsci53CQklZDEKCW1vdi5iCQlEVEFHKCVhNiksJWQxCglsc2wuYgkJJjB4MywlZDEKCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncwoKCWJuZS53CQlmYWRkX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgQUREOiBub3JtcyBhbmQgZGVub3JtcwojCmZhZGRfbm9ybToKCWJzci5sCQlhZGRzdWJfc2NhbGVyMgkJIyBzY2FsZSBleHBvbmVudHMKCmZhZGRfemVyb19lbnRyeToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMixOLFoKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIGV4YyBhbmQgY2NvZGUgYml0cwoKCWZiZXEudwkJZmFkZF96ZXJvX2V4aXQJCSMgaWYgcmVzdWx0IGlzIHplcm8sIGVuZCBub3cKCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCglsc3IuYgkJJjB4NiwlZDEKCgltb3YudwkJKCVzcCksJWQyCQkjIGZldGNoIG5ldyBzaWduLCBleHAKCWFuZGkubAkJJjB4N2ZmZiwlZDIJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDIJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCgljbXAubAkJJWQyLCh0YmxfZmFkZF9vdmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gb3ZlcmZsb3c/CgliZ2UuYgkJZmFkZF9vdmZsCQkjIHllcwoKCWNtcC5sCQklZDIsKHRibF9mYWRkX3VuZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiB1bmRlcmZsb3c/CglibHQudwkJZmFkZF91bmZsCQkjIHllcwoJYmVxLncJCWZhZGRfbWF5X3VuZmwJCSMgbWF5YmU7IGdvIGZpbmQgb3V0CgpmYWRkX25vcm1hbDoKCW1vdi53CQkoJXNwKSwlZDEKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKCglmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglydHMKCmZhZGRfemVyb19leGl0OgojCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiB6ZXJvIGluIGZwMAoJcnRzCgp0YmxfZmFkZF9vdmZsOgoJbG9uZwkJMHg3ZmZmCQkJIyBleHQgb3ZmbAoJbG9uZwkJMHg0MDdmCQkJIyBzZ2wgb3ZmbAoJbG9uZwkJMHg0M2ZmCQkJIyBkYmwgb3ZmbAoKdGJsX2ZhZGRfdW5mbDoKCWxvbmcJICAgICAgICAweDAwMDAJCQkjIGV4dCB1bmZsCglsb25nCQkweDNmODEJCQkjIHNnbCB1bmZsCglsb25nCQkweDNjMDEJCQkjIGRibCB1bmZsCgpmYWRkX292Zmw6Cglvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmYWRkX292ZmxfZW5hCQkjIHllcwoKCWFkZC5sCQkmMHhjLCVzcApmYWRkX292ZmxfZGlzOgoJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPwoJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJcnRzCgpmYWRkX292ZmxfZW5hOgoJbW92LmIJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZhZGRfb3ZmbF9lbmFfc2QJIyBubzsgcHJlYyA9IHNnbCBvciBkYmwKCmZhZGRfb3ZmbF9lbmFfY29udDoKCW1vdi53CQkoJXNwKSwlZDEKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCglzdWJpLmwJCSYweDYwMDAsJWQyCQkjIGFkZCBleHRyYSBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQyCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKCglmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEuYgkJZmFkZF9vdmZsX2RpcwoKZmFkZF9vdmZsX2VuYV9zZDoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWFkZC5sCQkmMHhjLCVzcAoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCglicmEuYgkJZmFkZF9vdmZsX2VuYV9jb250CgpmYWRkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCglhZGQubAkJJjB4Yywlc3AKCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmYWRkX3VuZmxfZW5hCQkjIHllcwoKZmFkZF91bmZsX2RpczoKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJcnRzCgpmYWRkX3VuZmxfZW5hOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUuYgkJZmFkZF91bmZsX2VuYV9zZAkjIG5vOyBzZ2wgb3IgZGJsCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgpmYWRkX3VuZmxfZW5hX2NvbnQ6CglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIG11bHRpcGx5CgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjawoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0Cglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJYnJhLncJCWZhZGRfdW5mbF9kaXMKCmZhZGRfdW5mbF9lbmFfc2Q6Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglicmEuYgkJZmFkZF91bmZsX2VuYV9jb250CgojCiMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCiMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCiMgdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cC4KIwpmYWRkX21heV91bmZsOgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEKCWJlcS53CQlmYWRkX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoKCW1vdi5sCQkweDQoJXNwKSwlZDEJCSMgZXh0cmFjdCBoaShtYW4pCgljbXBpLmwJCSVkMSwmMHg4MDAwMDAwMAkJIyBpcyBoaShtYW4pID0gMHg4MDAwMDAwMD8KCWJuZS53CQlmYWRkX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCgoJdHN0LmwJCTB4OCglc3ApCQkjIGlzIGxvKG1hbikgPSAweDA/CglibmUudwkJZmFkZF9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KCWJlcS53CQlmYWRkX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCgojCiMgb2ssIHNvIG5vdyB0aGUgcmVzdWx0IGhhcyBhIGV4cG9uZW50IGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkCiMgZXhwb25lbnQgZm9yIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24uIGFsc28sIHRoZSBtYW50aXNzYSBpcyBlcXVhbCB0bwojIDB4ODAwMDAwMDAwMDAwMDAwMCBhbmQgdGhpcyBtYW50aXNzYSBpcyB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIG5vbi16ZXJvCiMgZyxyLHMuCiMgbm93LCB3ZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIHRoZSBwcmUtcm91bmRlZCByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdwojIHJvdW5kZWQgInVwIiBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHJvdW5kZWQgImRvd24iLgojIHNvLCB3ZSBkbyB0aGlzIGJlIHJlLWV4ZWN1dGluZyB0aGUgYWRkIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIGFuZAojIHNlZWluZyBpZiB0aGUgbmV3IHJlc3VsdCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IHJlc3VsdC4KIwoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCglvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgcm5kIG1vZGUKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGFkZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJZmFicy54CQklZnAwCQkJIyBjb21wYXJlIGFic29sdXRlIHZhbHVlcwoJZmFicy54CQklZnAxCglmY21wLngJCSVmcDAsJWZwMQkJIyBpcyBmaXJzdCByZXN1bHQgPiBzZWNvbmQ/CgoJZmJndC53CQlmYWRkX3VuZmwJCSMgeWVzOyBpdCdzIGFuIHVuZGVyZmxvdwoJYnJhLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBpdCdzIG5vdCBhbiB1bmRlcmZsb3cKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgQWRkOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CiMKZmFkZF9ub3Rfbm9ybToKCW1vdi53CQkodGJsX2ZhZGRfb3AuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfZmFkZF9vcC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmNDgKdGJsX2ZhZGRfb3A6CglzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgTk9STQoJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBaRVJPCglzaG9ydAkJZmFkZF9pbmZfc3JjCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgSU5GCglzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBERU5PUk0KCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoKCXNob3J0CQlmYWRkX3plcm9fZHN0CS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgTk9STQoJc2hvcnQJCWZhZGRfemVyb18yCS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgWkVSTwoJc2hvcnQJCWZhZGRfaW5mX3NyYwktIHRibF9mYWRkX29wICMgWkVSTyArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCglzaG9ydAkJZmFkZF96ZXJvX2RzdAktIHRibF9mYWRkX29wICMgWkVSTyArIERFTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBTTkFOCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCgoJc2hvcnQJCWZhZGRfaW5mX2RzdAktIHRibF9mYWRkX29wICMgSU5GICsgTk9STQoJc2hvcnQJCWZhZGRfaW5mX2RzdAktIHRibF9mYWRkX29wICMgSU5GICsgWkVSTwoJc2hvcnQJCWZhZGRfaW5mXzIJLSB0YmxfZmFkZF9vcCAjIElORiArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCglzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBERU5PUk0KCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoKCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgTk9STQoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBaRVJPCglzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBRTkFOCglzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIERFTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBTTkFOCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCgoJc2hvcnQJCWZhZGRfbm9ybQktIHRibF9mYWRkX29wICMgREVOT1JNICsgTk9STQoJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIFpFUk8KCXNob3J0CQlmYWRkX2luZl9zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCglzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBERU5PUk0KCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoKCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBaRVJPCglzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIElORgoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBRTkFOCglzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIERFTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBTTkFOCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCgpmYWRkX3Jlc19xbmFuOgoJYnJhLmwJCXJlc19xbmFuCmZhZGRfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KCiMKIyBib3RoIG9wZXJhbmRzIGFyZSBaRVJPZXMKIwpmYWRkX3plcm9fMjoKCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgYXJlIHRoZSBzaWducyBvcHBvc2l0ZQoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJtaS53CQlmYWRkX3plcm9fMl9jaGtfcm0JIyB3ZWVkIG91dCAoLVpFUk8pKygrWkVSTykKCiMgdGhlIHNpZ25zIGFyZSB0aGUgc2FtZS4gc28gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUKIyBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZWx5IHNpZ25lZCB6ZXJvLgoJdHN0LmIJCSVkMAkJCSMgYXJlIFpFUk9lcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KCWJtaS5iCQlmYWRkX3plcm9fcm0JCSMgbmVnYXRpdmUKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCiMKIyB0aGUgWkVST2VzIGhhdmUgb3Bwb3NpdGUgc2lnbnM6CiMgLSB0aGVyZWZvcmUsIHdlIHJldHVybiArWkVSTyBpZiB0aGUgcm91bmRpbmcgbW9kZXMgYXJlIFJOLFJaLCBvciBSUC4KIyAtIC1aRVJPIGlzIHJldHVybmVkIGluIHRoZSBjYXNlIG9mIFJNLgojCmZhZGRfemVyb18yX2Noa19ybToKCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQoJY21waS5iCQklZDEsJnJtX21vZGUqMHgxMAkjIGlzIHJuZCBtb2RlID09IFJNPwoJYmVxLmIJCWZhZGRfemVyb19ybQkJIyB5ZXMKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCmZhZGRfemVyb19ybToKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTwoJbW92LmIJCSZuZWdfYm1hc2srel9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgTkVHL1oKCXJ0cwoKIwojIG9uZSBvcGVyYW5kIGlzIGEgWkVSTyBhbmQgdGhlIG90aGVyIGlzIGEgREVOT1JNIG9yIE5PUk0uIHNjYWxlCiMgdGhlIERFTk9STSBvciBOT1JNIGFuZCBqdW1wIHRvIHRoZSByZWd1bGFyIGZhZGQgcm91dGluZS4KIwpmYWRkX3plcm9fZHN0OgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgdGhlIG9wZXJhbmQKCWNsci53CQlGUF9TQ1IxX0VYKCVhNikKCWNsci5sCQlGUF9TQ1IxX0hJKCVhNikKCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKCWJyYS53CQlmYWRkX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmYWRkCgpmYWRkX3plcm9fc3JjOgoJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQoJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQoJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgdGhlIG9wZXJhbmQKCWNsci53CQlGUF9TQ1IwX0VYKCVhNikKCWNsci5sCQlGUF9TQ1IwX0hJKCVhNikKCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKCWJyYS53CQlmYWRkX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmYWRkCgojCiMgYm90aCBvcGVyYW5kcyBhcmUgSU5Gcy4gYW4gT1BFUlIgd2lsbCByZXN1bHQgaWYgdGhlIElORnMgaGF2ZQojIGRpZmZlcmVudCBzaWducy4gZWxzZSwgYW4gSU5GIG9mIHRoZSBzYW1lIHNpZ24gaXMgcmV0dXJuZWQKIwpmYWRkX2luZl8yOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCgltb3YuYgkJRFNUX0VYKCVhMSksJWQxCgllb3IuYgkJJWQxLCVkMAoJYm1pLmwJCXJlc19vcGVycgkJIyB3ZWVkIG91dCAoLUlORikrKCtJTkYpCgojIG9rLCBzbyBpdCdzIG5vdCBhbiBPUEVSUi4gYnV0LCB3ZSBkbyBoYXZlIHRvIHJlbWVtYmVyIHRvIHJldHVybiB0aGUKIyBzcmMgSU5GIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgODgxLzg4MiBnZXRzIHRoZSBqLWJpdCBmcm9tLi4uCgojCiMgb3BlcmFuZHMgYXJlIElORiBhbmQgb25lIG9mIHtaRVJPLCBJTkYsIERFTk9STSwgTk9STX0KIwpmYWRkX2luZl9zcmM6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gc3JjIElORgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZT8KCWJwbC5iCQlmYWRkX2luZl9kb25lCQkjIHllczsgd2UncmUgZG9uZQoJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCglydHMKCiMKIyBvcGVyYW5kcyBhcmUgSU5GIGFuZCBvbmUgb2Yge1pFUk8sIElORiwgREVOT1JNLCBOT1JNfQojCmZhZGRfaW5mX2RzdDoKCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCgl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgaXMgSU5GIHBvc2l0aXZlPwoJYnBsLmIJCWZhZGRfaW5mX2RvbmUJCSMgeWVzOyB3ZSdyZSBkb25lCgltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKCXJ0cwoKZmFkZF9pbmZfZG9uZToKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnN1YigpOiBlbXVsYXRlcyB0aGUgZnN1YiBpbnN0cnVjdGlvbgkJCQkjCiMJZnNzdWIoKTogZW11bGF0ZXMgdGhlIGZzc3ViIGluc3RydWN0aW9uCQkJCSMKIwlmZHN1YigpOiBlbXVsYXRlcyB0aGUgZmRzdWIgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYWRkc3ViX3NjYWxlcjIoKSAtIHNjYWxlIHRoZSBvcGVyYW5kcyBzbyB0aGV5IHdvbid0IHRha2UgZXhjCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbigpIC0gc2V0IFFOQU4gcmVzdWx0CQkJCQkjCiMJcmVzX3NuYW4oKSAtIHNldCBTTkFOIHJlc3VsdAkJCQkJIwojCXJlc19vcGVycigpIC0gc2V0IE9QRVJSIHJlc3VsdAkJCQkJIwojCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzZXQgc3JjIG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCiMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNldCBkc3Qgb3BlcmFuZCBleHBvbmVudCBlcXVhbCB0byB6ZXJvCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIwojCURvIHN1YnRyYWN0aW9uIGFmdGVyIHNjYWxpbmcgZXhwb25lbnRzIHN1Y2ggdGhhdCBleGNlcHRpb24gd29uJ3QjCiMgb2NjdXIuIFRoZW4sIGNoZWNrIHJlc3VsdCBleHBvbmVudCB0byBzZWUgaWYgZXhjZXB0aW9uIHdvdWxkIGhhdmUJIwojIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGFuZCBtYXliZSBFWE9QLiBFbHNlLCBpbnNlcnQJIwojIHRoZSBjb3JyZWN0IHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuLiBTZXQgRlBTUiBiaXRzIGFzIGFwcHJvcHJpYXRlLgkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzc3ViCmZzc3ViOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCglicmEuYgkJZnN1YgoKCWdsb2JhbAkJZmRzdWIKZmRzdWI6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZzdWIKZnN1YjoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCglibmUudwkJZnN1Yl9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIFNVQjogbm9ybXMgYW5kIGRlbm9ybXMKIwpmc3ViX25vcm06Cglic3IubAkJYWRkc3ViX3NjYWxlcjIJCSMgc2NhbGUgZXhwb25lbnRzCgpmc3ViX3plcm9fZW50cnk6CglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMiwgTiwgWgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgZXhjIGFuZCBjY29kZSBiaXRzCgoJZmJlcS53CQlmc3ViX3plcm9fZXhpdAkJIyBpZiByZXN1bHQgemVybywgZW5kIG5vdwoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCglmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCgltb3YudwkJMitMX1NDUjMoJWE2KSwlZDEKCWxzci5iCQkmMHg2LCVkMQoKCW1vdi53CQkoJXNwKSwlZDIJCSMgZmV0Y2ggbmV3IGV4cG9uZW50CglhbmRpLmwJCSYweDdmZmYsJWQyCQkjIHN0cmlwIHNpZ24KCXN1Yi5sCQklZDAsJWQyCQkJIyBhZGQgc2NhbGUgZmFjdG9yCgoJY21wLmwJCSVkMiwodGJsX2ZzdWJfb3ZmbC5iLCVwYywlZDEudyo0KSAjIGlzIGl0IGFuIG92ZXJmbG93PwoJYmdlLmIJCWZzdWJfb3ZmbAkJIyB5ZXMKCgljbXAubAkJJWQyLCh0YmxfZnN1Yl91bmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gdW5kZXJmbG93PwoJYmx0LncJCWZzdWJfdW5mbAkJIyB5ZXMKCWJlcS53CQlmc3ViX21heV91bmZsCQkjIG1heWJlOyBnbyBmaW5kIG91dAoKZnN1Yl9ub3JtYWw6Cgltb3YudwkJKCVzcCksJWQxCglhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgoJb3IudwkJJWQyLCVkMQkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LncJCSVkMSwoJXNwKQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CgoJZm1vdm0ueAkJKCVzcCkrLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCgoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJcnRzCgpmc3ViX3plcm9fZXhpdDoKIwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gemVybyBpbiBmcDAKCXJ0cwoKdGJsX2ZzdWJfb3ZmbDoKCWxvbmcJCTB4N2ZmZgkJCSMgZXh0IG92ZmwKCWxvbmcJCTB4NDA3ZgkJCSMgc2dsIG92ZmwKCWxvbmcJCTB4NDNmZgkJCSMgZGJsIG92ZmwKCnRibF9mc3ViX3VuZmw6Cglsb25nCSAgICAgICAgMHgwMDAwCQkJIyBleHQgdW5mbAoJbG9uZwkJMHgzZjgxCQkJIyBzZ2wgdW5mbAoJbG9uZwkJMHgzYzAxCQkJIyBkYmwgdW5mbAoKZnN1Yl9vdmZsOgoJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZnN1Yl9vdmZsX2VuYQkJIyB5ZXMKCglhZGQubAkJJjB4Yywlc3AKZnN1Yl9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCXJ0cwoKZnN1Yl9vdmZsX2VuYToKCW1vdi5iCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmc3ViX292ZmxfZW5hX3NkCSMgbm8KCmZzdWJfb3ZmbF9lbmFfY29udDoKCW1vdi53CQkoJXNwKSwlZDEJCSMgZmV0Y2gge3NnbixleHB9CglhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgoJc3ViaS5sCQkmMHg2MDAwLCVkMgkJIyBzdWJ0cmFjdCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMgkJIyBjbGVhciB0b3AgYml0Cglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoKCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmc3ViX292ZmxfZGlzCgpmc3ViX292ZmxfZW5hX3NkOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYwoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJYWRkLmwJCSYweGMsJXNwCglmbW92bS54CQkmMHgwMSwtKCVzcCkKCWJyYS5iCQlmc3ViX292ZmxfZW5hX2NvbnQKCmZzdWJfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoKCWFkZC5sCQkmMHhjLCVzcAoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzdWJfdW5mbF9lbmEJCSMgeWVzCgpmc3ViX3VuZmxfZGlzOgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgbWF5IGhhdmUgYmVlbiBzZXQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCXJ0cwoKZnN1Yl91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmc3ViX3VuZmxfZW5hX3NkCSMgbm8KCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCmZzdWJfdW5mbF9lbmFfY29udDoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc3VidHJhY3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIHJlc3VsdCB0byBzdGFjawoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IG5ldyBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHRvcCBiaXQKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzZ24sZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJYnJhLncJCWZzdWJfdW5mbF9kaXMKCmZzdWJfdW5mbF9lbmFfc2Q6Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYwoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglicmEuYgkJZnN1Yl91bmZsX2VuYV9jb250CgojCiMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCiMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCiMgdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cC4KIwpmc3ViX21heV91bmZsOgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZmV0Y2ggcm5kIHByZWMKCWJlcS53CQlmc3ViX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoKCW1vdi5sCQkweDQoJXNwKSwlZDEKCWNtcGkubAkJJWQxLCYweDgwMDAwMDAwCQkjIGlzIGhpKG1hbikgPSAweDgwMDAwMDAwPwoJYm5lLncJCWZzdWJfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKCgl0c3QubAkJMHg4KCVzcCkJCSMgaXMgbG8obWFuKSA9IDB4MD8KCWJuZS53CQlmc3ViX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCgoJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PwoJYmVxLncJCWZzdWJfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKCiMKIyBvaywgc28gbm93IHRoZSByZXN1bHQgaGFzIGEgZXhwb25lbnQgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQKIyBleHBvbmVudCBmb3IgdGhlIHNlbGVjdGVkIHByZWNpc2lvbi4gYWxzbywgdGhlIG1hbnRpc3NhIGlzIGVxdWFsIHRvCiMgMHg4MDAwMDAwMDAwMDAwMDAwIGFuZCB0aGlzIG1hbnRpc3NhIGlzIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgbm9uLXplcm8KIyBnLHIscy4KIyBub3csIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93CiMgcm91bmRlZCAidXAiIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgcm91bmRlZCAiZG93biIuCiMgc28sIHdlIGRvIHRoaXMgYmUgcmUtZXhlY3V0aW5nIHRoZSBhZGQgdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kCiMgc2VlaW5nIGlmIHRoZSBuZXcgcmVzdWx0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgcmVzdWx0LgojCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBybmQgbW9kZQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc3VidHJhY3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZhYnMueAkJJWZwMAkJCSMgY29tcGFyZSBhYnNvbHV0ZSB2YWx1ZXMKCWZhYnMueAkJJWZwMQoJZmNtcC54CQklZnAwLCVmcDEJCSMgaXMgZmlyc3QgcmVzdWx0ID4gc2Vjb25kPwoKCWZiZ3QudwkJZnN1Yl91bmZsCQkjIHllczsgaXQncyBhbiB1bmRlcmZsb3cKCWJyYS53CQlmc3ViX25vcm1hbAkJIyBubzsgaXQncyBub3QgYW4gdW5kZXJmbG93CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIFN1YjogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PwojCmZzdWJfbm90X25vcm06Cgltb3YudwkJKHRibF9mc3ViX29wLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2ZzdWJfb3AuYiwlcGMsJWQxLncqMSkKCglzd2JlZwkJJjQ4CnRibF9mc3ViX29wOgoJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgTk9STSAtIE5PUk0KCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gWkVSTwoJc2hvcnQJCWZzdWJfaW5mX3NyYwktIHRibF9mc3ViX29wICMgTk9STSAtIElORgoJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCglzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gREVOT1JNCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCglzaG9ydAkJZnN1Yl96ZXJvX2RzdAktIHRibF9mc3ViX29wICMgWkVSTyAtIE5PUk0KCXNob3J0CQlmc3ViX3plcm9fMgktIHRibF9mc3ViX29wICMgWkVSTyAtIFpFUk8KCXNob3J0CQlmc3ViX2luZl9zcmMJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgoJc2hvcnQJCWZzdWJfemVyb19kc3QJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBERU5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gU05BTgoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoKCXNob3J0CQlmc3ViX2luZl9kc3QJLSB0YmxfZnN1Yl9vcCAjIElORiAtIE5PUk0KCXNob3J0CQlmc3ViX2luZl9kc3QJLSB0YmxfZnN1Yl9vcCAjIElORiAtIFpFUk8KCXNob3J0CQlmc3ViX2luZl8yCS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgoJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gREVOT1JNCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCglzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIE5PUk0KCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gWkVSTwoJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gUU5BTgoJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBERU5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gU05BTgoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoKCXNob3J0CQlmc3ViX25vcm0JLSB0YmxfZnN1Yl9vcCAjIERFTk9STSAtIE5PUk0KCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBaRVJPCglzaG9ydAkJZnN1Yl9pbmZfc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgoJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgREVOT1JNIC0gREVOT1JNCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIE5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gWkVSTwoJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gUU5BTgoJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBERU5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gU05BTgoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoKZnN1Yl9yZXNfcW5hbjoKCWJyYS5sCQlyZXNfcW5hbgpmc3ViX3Jlc19zbmFuOgoJYnJhLmwJCXJlc19zbmFuCgojCiMgYm90aCBvcGVyYW5kcyBhcmUgWkVST2VzCiMKZnN1Yl96ZXJvXzI6Cgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCgltb3YuYgkJRFNUX0VYKCVhMSksJWQxCgllb3IuYgkJJWQxLCVkMAoJYnBsLmIJCWZzdWJfemVyb18yX2Noa19ybQoKIyB0aGUgc2lnbnMgYXJlIG9wcG9zaXRlLCBzbywgcmV0dXJuIGEgWkVSTyB3LyB0aGUgc2lnbiBvZiB0aGUgZHN0IFpFUk8KCXRzdC5iCQklZDAJCQkjIGlzIGRzdCBuZWdhdGl2ZT8KCWJtaS5iCQlmc3ViX3plcm9fMl9ybQkJIyB5ZXMKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIG5vOyByZXR1cm4gK1pFUk8KCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgoJcnRzCgojCiMgdGhlIFpFUk9lcyBoYXZlIHRoZSBzYW1lIHNpZ25zOgojIC0gdGhlcmVmb3JlLCB3ZSByZXR1cm4gK1pFUk8gaWYgdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk4sUlosIG9yIFJQCiMgLSAtWkVSTyBpcyByZXR1cm5lZCBpbiB0aGUgY2FzZSBvZiBSTS4KIwpmc3ViX3plcm9fMl9jaGtfcm06Cgltb3YuYgkJMytMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKCWNtcGkuYgkJJWQxLCZybV9tb2RlKjB4MTAJIyBpcyBybmQgbW9kZSA9IFJNPwoJYmVxLmIJCWZzdWJfemVyb18yX3JtCQkjIHllcwoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbm87IHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCmZzdWJfemVyb18yX3JtOgoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCgltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL05FRwoJcnRzCgojCiMgb25lIG9wZXJhbmQgaXMgYSBaRVJPIGFuZCB0aGUgb3RoZXIgaXMgYSBERU5PUk0gb3IgYSBOT1JNLgojIHNjYWxlIHRoZSBERU5PUk0gb3IgTk9STSBhbmQganVtcCB0byB0aGUgcmVndWxhciBmc3ViIHJvdXRpbmUuCiMKZnN1Yl96ZXJvX2RzdDoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHRoZSBvcGVyYW5kCgljbHIudwkJRlBfU0NSMV9FWCglYTYpCgljbHIubAkJRlBfU0NSMV9ISSglYTYpCgljbHIubAkJRlBfU0NSMV9MTyglYTYpCglicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgoKZnN1Yl96ZXJvX3NyYzoKCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIHRoZSBvcGVyYW5kCgljbHIudwkJRlBfU0NSMF9FWCglYTYpCgljbHIubAkJRlBfU0NSMF9ISSglYTYpCgljbHIubAkJRlBfU0NSMF9MTyglYTYpCglicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgoKIwojIGJvdGggb3BlcmFuZHMgYXJlIElORnMuIGFuIE9QRVJSIHdpbGwgcmVzdWx0IGlmIHRoZSBJTkZzIGhhdmUgdGhlCiMgc2FtZSBzaWducy4gZWxzZSwKIwpmc3ViX2luZl8yOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCgltb3YuYgkJRFNUX0VYKCVhMSksJWQxCgllb3IuYgkJJWQxLCVkMAoJYnBsLmwJCXJlc19vcGVycgkJIyB3ZWVkIG91dCAoLUlORikrKCtJTkYpCgojIG9rLCBzbyBpdCdzIG5vdCBhbiBPUEVSUi4gYnV0IHdlIGRvIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmV0dXJuCiMgdGhlIHNyYyBJTkYgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSA4ODEvODgyIGdldHMgdGhlIGotYml0LgoKZnN1Yl9pbmZfc3JjOgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHNyYyBJTkYKCWZuZWcueAkJJWZwMAkJCSMgaW52ZXJ0IHNpZ24KCWZiZ2UudwkJZnN1Yl9pbmZfZG9uZQkJIyBzaWduIGlzIG5vdyBwb3NpdGl2ZQoJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCglydHMKCmZzdWJfaW5mX2RzdDoKCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCgl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgaXMgSU5GIG5lZ2F0aXZlPwoJYnBsLmIJCWZzdWJfaW5mX2RvbmUJCSMgbm8KCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRwoJcnRzCgpmc3ViX2luZl9kb25lOgoJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNxcnQgaW5zdHJ1Y3Rpb24JCQkJIwojCWZzc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNzcXJ0IGluc3RydWN0aW9uCQkJIwojCWZkc3FydCgpOiBlbXVsYXRlcyB0aGUgZmRzcXJ0IGluc3RydWN0aW9uCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfc3FydCgpIC0gc2NhbGUgdGhlIHNvdXJjZSBvcGVyYW5kCQkJCSMKIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIwojCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCiMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCiMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIwojCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIHNxcnQJCSMKIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmc3FydCB0bwkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzc3FydApmc3NxcnQ6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgoJYnJhLmIJCWZzcXJ0CgoJZ2xvYmFsCQlmZHNxcnQKZmRzcXJ0OgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KCglnbG9iYWwJCWZzcXJ0CmZzcXJ0OgoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbwoJY2xyLncJCSVkMQoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJuZS53CQlmc3FydF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIFNRVUFSRSBST09UOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQojCmZzcXJ0X25vcm06Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KCWJtaS5sCQlyZXNfb3BlcnIJCSMgeWVzCgoJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZzcXJ0X25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzcXJ0LngJCSglYTApLCVmcDAJCSMgZXhlY3V0ZSBzcXVhcmUgcm9vdAoKCWZtb3YubAkJJWZwc3IsJWQxCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzZXQgTixJTkVYCgoJcnRzCgpmc3FydF9kZW5vcm06Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KCWJtaS5sCQlyZXNfb3BlcnIJCSMgeWVzCgoJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZzcXJ0X25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWJzci5sCQlzY2FsZV9zcXJ0CQkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKCglicmEudwkJZnNxcnRfc2Rfbm9ybWFsCgojCiMgb3BlcmFuZCBpcyBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZQojCmZzcXJ0X25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS53CQlmc3FydF9kYmwKCiMKIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgojCmZzcXJ0X3NnbDoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCglic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODEJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmVxLncJCWZzcXJ0X3NkX21heV91bmZsCgliZ3QudwkJZnNxcnRfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdmCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZzcXJ0X3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCglibHQudwkJZnNxcnRfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoKIwojIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCiMKZnNxcnRfc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzcXJ0X3NkX25vcm1hbF9leGl0OgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHNnbixleHAKCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KIwpmc3FydF9kYmw6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgoJYnNyLmwJCXNjYWxlX3NxcnQJCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAxCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KCWJlcS53CQlmc3FydF9zZF9tYXlfdW5mbAoJYmd0LmIJCWZzcXJ0X3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CgljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZgkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KCWJlcS53CQlmc3FydF9zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjawoJYmx0LncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCWJyYS53CQlmc3FydF9zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCgojIHdlJ3JlIG9uIHRoZSBsaW5lIGhlcmUgYW5kIHRoZSBkaXN0aW5ndWlzaW5nIGNoYXJhY3RlcmlzdGljIGlzIHdoZXRoZXIKIyB0aGUgZXhwb25lbnQgaXMgM2ZmZiBvciAzZmZlLiBpZiBpdCdzIDNmZmUsIHRoZW4gaXQncyBhIHNhZmUgbnVtYmVyCiMgZWxzZXdpc2UgZmFsbCB0aHJvdWdoIHRvIHVuZGVyZmxvdy4KZnNxcnRfc2RfbWF5X3VuZmw6CglidHN0CQkmMHgwLDErRlBfU0NSMF9FWCglYTYpCSMgaXMgZXhwb25lbnQgMHgzZmZmPwoJYm5lLncJCWZzcXJ0X3NkX25vcm1hbAkJIyB5ZXMsIHNvIG5vIHVuZGVyZmxvdwoKIwojIG9wZXJhbmQgV0lMTCB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnaXN0ZXIgZmlsZQojCmZzcXJ0X3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCglmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3F1YXJlIHJvb3QKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCiMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzcXJ0X3NkX3VuZmxfZW5hCSMgeWVzCgpmc3FydF9zZF91bmZsX2RpczoKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IHBvc3NpYmxlICdaJyBjY29kZQoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IGlzIGVuYWJsZWQuCiMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgojCmZzcXJ0X3NkX3VuZmxfZW5hOgoJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglicmEuYgkJZnNxcnRfc2RfdW5mbF9kaXMKCiMKIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCiMKZnNxcnRfc2Rfb3ZmbDoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gc3F1YXJlIHJvb3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgpmc3FydF9zZF9vdmZsX3RzdDoKCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzcXJ0X3NkX292ZmxfZW5hCSMgeWVzCgojCiMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKIyBjYWxsaW5nIG92Zl9yZXMoKS4KIwpmc3FydF9zZF9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZGTCBpcyBlbmFibGVkLgojIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCiMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgojCmZzcXJ0X3NkX292ZmxfZW5hOgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCWJyYS5iCQlmc3FydF9zZF9vdmZsX2RpcwoKIwojIHRoZSBtb3ZlIGluIE1BWSB1bmRlcmZsb3cuIHNvLi4uCiMKZnNxcnRfc2RfbWF5X292Zmw6CglidHN0CQkmMHgwLDErRlBfU0NSMF9FWCglYTYpCSMgaXMgZXhwb25lbnQgMHgzZmZmPwoJYm5lLncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzLCBzbyBvdmVyZmxvdwoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmbW92LngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID49IDEuYj8KCWZiZ2UudwkJZnNxcnRfc2Rfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZnNxcnRfc2Rfbm9ybWFsX2V4aXQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CiMKZnNxcnRfbm90X25vcm06CgljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQoJYmVxLncJCWZzcXJ0X2Rlbm9ybQoJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTwoJYmVxLmIJCWZzcXJ0X3plcm8KCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCgliZXEuYgkJZnNxcnRfaW5mCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCgliZXEubAkJcmVzX3NuYW5fMW9wCglicmEubAkJcmVzX3FuYW5fMW9wCgojCiMJZnNxcnQoKzApID0gKzAKIwlmc3FydCgtMCkgPSAtMAojCWZzcXJ0KCtJTkYpID0gK0lORgojCWZzcXJ0KC1JTkYpID0gT1BFUlIKIwpmc3FydF96ZXJvOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gcG9zaXRpdmUgb3IgbmVnYXRpdmU/CglibWkuYgkJZnNxcnRfemVyb19tCQkjIG5lZ2F0aXZlCmZzcXJ0X3plcm9fcDoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CglydHMKZnNxcnRfemVyb19tOgoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCgltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicsJ04nIGNjb2RlIGJpdHMKCXJ0cwoKZnNxcnRfaW5mOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KCWJtaS5sCQlyZXNfb3BlcnIJCSMgbmVnYXRpdmUKZnNxcnRfaW5mX3A6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gK0lORiBpbiBmcDAKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZldGNoX2RyZWcoKTogZmV0Y2ggcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIGluZGV4IGluIGQxCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSB2YWx1ZSBvZiByZWdpc3RlciBmZXRjaGVkCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxIHdoaWNoIGNhbiByYW5nZSBmcm9tIHplcm8JIwojIHRvIGZpZnRlZW4sIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgZmlsZSB2YWx1ZSAod2hlcmUJCSMKIyBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4ZXMgc3RhcnQgYXQgOCkuIEQwL0QxL0EwL0ExL0E2L0E3IGFyZSBvbiB0aGUJIwojIHN0YWNrLiBUaGUgcmVzdCBzaG91bGQgc3RpbGwgYmUgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIHRoaXMgcm91dGluZSBsZWF2ZXMgZDEgaW50YWN0IGZvciBzdWJzZXF1ZW50IHN0b3JlX2RyZWcgY2FsbHMuCglnbG9iYWwJCWZldGNoX2RyZWcKZmV0Y2hfZHJlZzoKCW1vdi53CQkodGJsX2ZkcmVnLmIsJXBjLCVkMS53KjIpLCVkMAoJam1wCQkodGJsX2ZkcmVnLmIsJXBjLCVkMC53KjEpCgp0YmxfZmRyZWc6CglzaG9ydAkJZmRyZWcwIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWcxIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWcyIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWczIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWc0IC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWc1IC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWc2IC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWc3IC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWc4IC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWc5IC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWdhIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWdiIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWdjIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWdkIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWdlIC0gdGJsX2ZkcmVnCglzaG9ydAkJZmRyZWdmIC0gdGJsX2ZkcmVnCgpmZHJlZzA6Cgltb3YubAkJRVhDX0RSRUdTKzB4MCglYTYpLCVkMAoJcnRzCmZkcmVnMToKCW1vdi5sCQlFWENfRFJFR1MrMHg0KCVhNiksJWQwCglydHMKZmRyZWcyOgoJbW92LmwJCSVkMiwlZDAKCXJ0cwpmZHJlZzM6Cgltb3YubAkJJWQzLCVkMAoJcnRzCmZkcmVnNDoKCW1vdi5sCQklZDQsJWQwCglydHMKZmRyZWc1OgoJbW92LmwJCSVkNSwlZDAKCXJ0cwpmZHJlZzY6Cgltb3YubAkJJWQ2LCVkMAoJcnRzCmZkcmVnNzoKCW1vdi5sCQklZDcsJWQwCglydHMKZmRyZWc4OgoJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlZDAKCXJ0cwpmZHJlZzk6Cgltb3YubAkJRVhDX0RSRUdTKzB4YyglYTYpLCVkMAoJcnRzCmZkcmVnYToKCW1vdi5sCQklYTIsJWQwCglydHMKZmRyZWdiOgoJbW92LmwJCSVhMywlZDAKCXJ0cwpmZHJlZ2M6Cgltb3YubAkJJWE0LCVkMAoJcnRzCmZkcmVnZDoKCW1vdi5sCQklYTUsJWQwCglydHMKZmRyZWdlOgoJbW92LmwJCSglYTYpLCVkMAoJcnRzCmZkcmVnZjoKCW1vdi5sCQlFWENfQTcoJWE2KSwlZDAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc3RvcmVfZHJlZ19sKCk6IHN0b3JlIGxvbmd3b3JkIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gbG9uZ293cmQgdmFsdWUgdG8gc3RvcmUJCQkJCSMKIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSBsb25nd29yZCB2YWx1ZQkjCiMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCiMgd2hpbGUgdGhlIHJlc3QgYXJlIGluIHRoZWlyIGluaXRpYWwgcGxhY2VzLgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXN0b3JlX2RyZWdfbApzdG9yZV9kcmVnX2w6Cgltb3YudwkJKHRibF9zZHJlZ2wuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0Ymxfc2RyZWdsLmIsJXBjLCVkMS53KjEpCgp0Ymxfc2RyZWdsOgoJc2hvcnQJCXNkcmVnbDAgLSB0Ymxfc2RyZWdsCglzaG9ydAkJc2RyZWdsMSAtIHRibF9zZHJlZ2wKCXNob3J0CQlzZHJlZ2wyIC0gdGJsX3NkcmVnbAoJc2hvcnQJCXNkcmVnbDMgLSB0Ymxfc2RyZWdsCglzaG9ydAkJc2RyZWdsNCAtIHRibF9zZHJlZ2wKCXNob3J0CQlzZHJlZ2w1IC0gdGJsX3NkcmVnbAoJc2hvcnQJCXNkcmVnbDYgLSB0Ymxfc2RyZWdsCglzaG9ydAkJc2RyZWdsNyAtIHRibF9zZHJlZ2wKCnNkcmVnbDA6Cgltb3YubAkJJWQwLEVYQ19EUkVHUysweDAoJWE2KQoJcnRzCnNkcmVnbDE6Cgltb3YubAkJJWQwLEVYQ19EUkVHUysweDQoJWE2KQoJcnRzCnNkcmVnbDI6Cgltb3YubAkJJWQwLCVkMgoJcnRzCnNkcmVnbDM6Cgltb3YubAkJJWQwLCVkMwoJcnRzCnNkcmVnbDQ6Cgltb3YubAkJJWQwLCVkNAoJcnRzCnNkcmVnbDU6Cgltb3YubAkJJWQwLCVkNQoJcnRzCnNkcmVnbDY6Cgltb3YubAkJJWQwLCVkNgoJcnRzCnNkcmVnbDc6Cgltb3YubAkJJWQwLCVkNwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzdG9yZV9kcmVnX3coKTogc3RvcmUgd29yZCB0byBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBkMQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IHdvcmQgdmFsdWUgdG8gc3RvcmUJCQkJCSMKIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSB3b3JkIHZhbHVlCSMKIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKIyB3aGlsZSB0aGUgcmVzdCBhcmUgaW4gdGhlaXIgaW5pdGlhbCBwbGFjZXMuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc3RvcmVfZHJlZ193CnN0b3JlX2RyZWdfdzoKCW1vdi53CQkodGJsX3NkcmVndy5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9zZHJlZ3cuYiwlcGMsJWQxLncqMSkKCnRibF9zZHJlZ3c6CglzaG9ydAkJc2RyZWd3MCAtIHRibF9zZHJlZ3cKCXNob3J0CQlzZHJlZ3cxIC0gdGJsX3NkcmVndwoJc2hvcnQJCXNkcmVndzIgLSB0Ymxfc2RyZWd3CglzaG9ydAkJc2RyZWd3MyAtIHRibF9zZHJlZ3cKCXNob3J0CQlzZHJlZ3c0IC0gdGJsX3NkcmVndwoJc2hvcnQJCXNkcmVndzUgLSB0Ymxfc2RyZWd3CglzaG9ydAkJc2RyZWd3NiAtIHRibF9zZHJlZ3cKCXNob3J0CQlzZHJlZ3c3IC0gdGJsX3NkcmVndwoKc2RyZWd3MDoKCW1vdi53CQklZDAsMitFWENfRFJFR1MrMHgwKCVhNikKCXJ0cwpzZHJlZ3cxOgoJbW92LncJCSVkMCwyK0VYQ19EUkVHUysweDQoJWE2KQoJcnRzCnNkcmVndzI6Cgltb3YudwkJJWQwLCVkMgoJcnRzCnNkcmVndzM6Cgltb3YudwkJJWQwLCVkMwoJcnRzCnNkcmVndzQ6Cgltb3YudwkJJWQwLCVkNAoJcnRzCnNkcmVndzU6Cgltb3YudwkJJWQwLCVkNQoJcnRzCnNkcmVndzY6Cgltb3YudwkJJWQwLCVkNgoJcnRzCnNkcmVndzc6Cgltb3YudwkJJWQwLCVkNwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzdG9yZV9kcmVnX2IoKTogc3RvcmUgYnl0ZSB0byBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBkMQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGJ5dGUgdmFsdWUgdG8gc3RvcmUJCQkJCSMKIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSBieXRlIHZhbHVlCSMKIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKIyB3aGlsZSB0aGUgcmVzdCBhcmUgaW4gdGhlaXIgaW5pdGlhbCBwbGFjZXMuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc3RvcmVfZHJlZ19iCnN0b3JlX2RyZWdfYjoKCW1vdi53CQkodGJsX3NkcmVnYi5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9zZHJlZ2IuYiwlcGMsJWQxLncqMSkKCnRibF9zZHJlZ2I6CglzaG9ydAkJc2RyZWdiMCAtIHRibF9zZHJlZ2IKCXNob3J0CQlzZHJlZ2IxIC0gdGJsX3NkcmVnYgoJc2hvcnQJCXNkcmVnYjIgLSB0Ymxfc2RyZWdiCglzaG9ydAkJc2RyZWdiMyAtIHRibF9zZHJlZ2IKCXNob3J0CQlzZHJlZ2I0IC0gdGJsX3NkcmVnYgoJc2hvcnQJCXNkcmVnYjUgLSB0Ymxfc2RyZWdiCglzaG9ydAkJc2RyZWdiNiAtIHRibF9zZHJlZ2IKCXNob3J0CQlzZHJlZ2I3IC0gdGJsX3NkcmVnYgoKc2RyZWdiMDoKCW1vdi5iCQklZDAsMytFWENfRFJFR1MrMHgwKCVhNikKCXJ0cwpzZHJlZ2IxOgoJbW92LmIJCSVkMCwzK0VYQ19EUkVHUysweDQoJWE2KQoJcnRzCnNkcmVnYjI6Cgltb3YuYgkJJWQwLCVkMgoJcnRzCnNkcmVnYjM6Cgltb3YuYgkJJWQwLCVkMwoJcnRzCnNkcmVnYjQ6Cgltb3YuYgkJJWQwLCVkNAoJcnRzCnNkcmVnYjU6Cgltb3YuYgkJJWQwLCVkNQoJcnRzCnNkcmVnYjY6Cgltb3YuYgkJJWQwLCVkNgoJcnRzCnNkcmVnYjc6Cgltb3YuYgkJJWQwLCVkNwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlpbmNfYXJlZygpOiBpbmNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlciBieSB0aGUgdmFsdWUgaW4gZDAJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSBhbW91bnQgdG8gaW5jcmVtZW50IGJ5CQkJCQkjCiMJZDEgPSBpbmRleCBvZiBhZGRyZXNzIHJlZ2lzdGVyIHRvIGluY3JlbWVudAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCShhZGRyZXNzIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUeXBpY2FsbHkgdXNlZCBmb3IgYW4gaW5zdHJ1Y3Rpb24gdy8gYSBwb3N0LWluY3JlbWVudCA8ZWE+LAkjCiMgdGhpcyByb3V0aW5lIGFkZHMgdGhlIGluY3JlbWVudCB2YWx1ZSBpbiBkMCB0byB0aGUgYWRkcmVzcyByZWdpc3RlcgkjCiMgc3BlY2lmaWVkIGJ5IGQxLiBBMC9BMS9BNi9BNyByZXNpZGUgb24gdGhlIHN0YWNrLiBUaGUgcmVzdCByZXNpZGUJIwojIGluIHRoZWlyIG9yaWdpbmFsIHBsYWNlcy4JCQkJCQkjCiMJRm9yIGE3LCBpZiB0aGUgaW5jcmVtZW50IGFtb3VudCBpcyBvbmUsIHRoZW4gd2UgaGF2ZSB0bwkJIwojIGluY3JlbWVudCBieSB0d28uIEZvciBhbnkgYTcgdXBkYXRlLCBzZXQgdGhlIG1pYTdfZmxhZyBzbyB0aGF0IGlmCSMKIyBhbiBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uIG9jY3VycyBsYXRlciBpbiBlbXVsYXRpb24sIHRoaXMgYWRkcmVzcwkjCiMgcmVnaXN0ZXIgdXBkYXRlIGNhbiBiZSB1bmRvbmUuCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWluY19hcmVnCmluY19hcmVnOgoJbW92LncJCSh0YmxfaWFyZWcuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfaWFyZWcuYiwlcGMsJWQxLncqMSkKCnRibF9pYXJlZzoKCXNob3J0CQlpYXJlZzAgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzEgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzIgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzMgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzQgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzUgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzYgLSB0YmxfaWFyZWcKCXNob3J0CQlpYXJlZzcgLSB0YmxfaWFyZWcKCmlhcmVnMDoJYWRkLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikKCXJ0cwppYXJlZzE6CWFkZC5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCglydHMKaWFyZWcyOglhZGQubAkJJWQwLCVhMgoJcnRzCmlhcmVnMzoJYWRkLmwJCSVkMCwlYTMKCXJ0cwppYXJlZzQ6CWFkZC5sCQklZDAsJWE0CglydHMKaWFyZWc1OglhZGQubAkJJWQwLCVhNQoJcnRzCmlhcmVnNjoJYWRkLmwJCSVkMCwoJWE2KQoJcnRzCmlhcmVnNzoJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikKCWNtcGkuYgkJJWQwLCYweDEKCWJlcS5iCQlpYXJlZzdiCglhZGQubAkJJWQwLEVYQ19BNyglYTYpCglydHMKaWFyZWc3YjoKCWFkZHEubAkJJjB4MixFWENfQTcoJWE2KQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkZWNfYXJlZygpOiBkZWNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlciBieSB0aGUgdmFsdWUgaW4gZDAJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSBhbW91bnQgdG8gZGVjcmVtZW50IGJ5CQkJCQkjCiMJZDEgPSBpbmRleCBvZiBhZGRyZXNzIHJlZ2lzdGVyIHRvIGRlY3JlbWVudAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCShhZGRyZXNzIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUeXBpY2FsbHkgdXNlZCBmb3IgYW4gaW5zdHJ1Y3Rpb24gdy8gYSBwcmUtZGVjcmVtZW50IDxlYT4sCSMKIyB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgZGVjcmVtZW50IHZhbHVlIGluIGQwIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCSMKIyBzcGVjaWZpZWQgYnkgZDEuIEEwL0ExL0E2L0E3IHJlc2lkZSBvbiB0aGUgc3RhY2suIFRoZSByZXN0IHJlc2lkZQkjCiMgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJCQkJCSMKIwlGb3IgYTcsIGlmIHRoZSBkZWNyZW1lbnQgYW1vdW50IGlzIG9uZSwgdGhlbiB3ZSBoYXZlIHRvCQkjCiMgZGVjcmVtZW50IGJ5IHR3by4gRm9yIGFueSBhNyB1cGRhdGUsIHNldCB0aGUgbWRhN19mbGFnIHNvIHRoYXQgaWYJIwojIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gb2NjdXJzIGxhdGVyIGluIGVtdWxhdGlvbiwgdGhpcyBhZGRyZXNzCSMKIyByZWdpc3RlciB1cGRhdGUgY2FuIGJlIHVuZG9uZS4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZGVjX2FyZWcKZGVjX2FyZWc6Cgltb3YudwkJKHRibF9kYXJlZy5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9kYXJlZy5iLCVwYywlZDEudyoxKQoKdGJsX2RhcmVnOgoJc2hvcnQJCWRhcmVnMCAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnMSAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnMiAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnMyAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnNCAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnNSAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnNiAtIHRibF9kYXJlZwoJc2hvcnQJCWRhcmVnNyAtIHRibF9kYXJlZwoKZGFyZWcwOglzdWIubAkJJWQwLEVYQ19EUkVHUysweDgoJWE2KQoJcnRzCmRhcmVnMToJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikKCXJ0cwpkYXJlZzI6CXN1Yi5sCQklZDAsJWEyCglydHMKZGFyZWczOglzdWIubAkJJWQwLCVhMwoJcnRzCmRhcmVnNDoJc3ViLmwJCSVkMCwlYTQKCXJ0cwpkYXJlZzU6CXN1Yi5sCQklZDAsJWE1CglydHMKZGFyZWc2OglzdWIubAkJJWQwLCglYTYpCglydHMKZGFyZWc3Ogltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQoJY21waS5iCQklZDAsJjB4MQoJYmVxLmIJCWRhcmVnN2IKCXN1Yi5sCQklZDAsRVhDX0E3KCVhNikKCXJ0cwpkYXJlZzdiOgoJc3VicS5sCQkmMHgyLEVYQ19BNyglYTYpCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbG9hZF9mcG4xKCk6IGxvYWQgRlAgcmVnaXN0ZXIgdmFsdWUgaW50byBGUF9TUkMoYTYpLgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSBpbmRleCBvZiBGUCByZWdpc3RlciB0byBsb2FkCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NSQyhhNikgPSB2YWx1ZSBsb2FkZWQgZnJvbSBGUCByZWdpc3RlciBmaWxlCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVXNpbmcgdGhlIGluZGV4IGluIGQwLCBsb2FkIEZQX1NSQyhhNikgd2l0aCBhIG51bWJlciBmcm9tIHRoZQkjCiMgRlAgcmVnaXN0ZXIgZmlsZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlsb2FkX2ZwbjEKbG9hZF9mcG4xOgoJbW92LncJCSh0YmxfbG9hZF9mcG4xLmIsJXBjLCVkMC53KjIpLCAlZDAKCWptcAkJKHRibF9sb2FkX2ZwbjEuYiwlcGMsJWQwLncqMSkKCnRibF9sb2FkX2ZwbjE6CglzaG9ydAkJbG9hZF9mcG4xXzAgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzEgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzIgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzMgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzQgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzUgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzYgLSB0YmxfbG9hZF9mcG4xCglzaG9ydAkJbG9hZF9mcG4xXzcgLSB0YmxfbG9hZF9mcG4xCgpsb2FkX2ZwbjFfMDoKCW1vdi5sCQkwK0VYQ19GUDAoJWE2KSwgMCtGUF9TUkMoJWE2KQoJbW92LmwJCTQrRVhDX0ZQMCglYTYpLCA0K0ZQX1NSQyglYTYpCgltb3YubAkJOCtFWENfRlAwKCVhNiksIDgrRlBfU1JDKCVhNikKCWxlYQkJRlBfU1JDKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMV8xOgoJbW92LmwJCTArRVhDX0ZQMSglYTYpLCAwK0ZQX1NSQyglYTYpCgltb3YubAkJNCtFWENfRlAxKCVhNiksIDQrRlBfU1JDKCVhNikKCW1vdi5sCQk4K0VYQ19GUDEoJWE2KSwgOCtGUF9TUkMoJWE2KQoJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4xXzI6CglmbW92bS54CQkmMHgyMCwgRlBfU1JDKCVhNikKCWxlYQkJRlBfU1JDKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMV8zOgoJZm1vdm0ueAkJJjB4MTAsIEZQX1NSQyglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjFfNDoKCWZtb3ZtLngJCSYweDA4LCBGUF9TUkMoJWE2KQoJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4xXzU6CglmbW92bS54CQkmMHgwNCwgRlBfU1JDKCVhNikKCWxlYQkJRlBfU1JDKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMV82OgoJZm1vdm0ueAkJJjB4MDIsIEZQX1NSQyglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjFfNzoKCWZtb3ZtLngJCSYweDAxLCBGUF9TUkMoJWE2KQoJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlsb2FkX2ZwbjIoKTogbG9hZCBGUCByZWdpc3RlciB2YWx1ZSBpbnRvIEZQX0RTVChhNikuCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGluZGV4IG9mIEZQIHJlZ2lzdGVyIHRvIGxvYWQJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRlBfRFNUKGE2KSA9IHZhbHVlIGxvYWRlZCBmcm9tIEZQIHJlZ2lzdGVyIGZpbGUJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlVc2luZyB0aGUgaW5kZXggaW4gZDAsIGxvYWQgRlBfRFNUKGE2KSB3aXRoIGEgbnVtYmVyIGZyb20gdGhlCSMKIyBGUCByZWdpc3RlciBmaWxlLgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWxvYWRfZnBuMgpsb2FkX2ZwbjI6Cgltb3YudwkJKHRibF9sb2FkX2ZwbjIuYiwlcGMsJWQwLncqMiksICVkMAoJam1wCQkodGJsX2xvYWRfZnBuMi5iLCVwYywlZDAudyoxKQoKdGJsX2xvYWRfZnBuMjoKCXNob3J0CQlsb2FkX2ZwbjJfMCAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfMSAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfMiAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfMyAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfNCAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfNSAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfNiAtIHRibF9sb2FkX2ZwbjIKCXNob3J0CQlsb2FkX2ZwbjJfNyAtIHRibF9sb2FkX2ZwbjIKCmxvYWRfZnBuMl8wOgoJbW92LmwJCTArRVhDX0ZQMCglYTYpLCAwK0ZQX0RTVCglYTYpCgltb3YubAkJNCtFWENfRlAwKCVhNiksIDQrRlBfRFNUKCVhNikKCW1vdi5sCQk4K0VYQ19GUDAoJWE2KSwgOCtGUF9EU1QoJWE2KQoJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4yXzE6Cgltb3YubAkJMCtFWENfRlAxKCVhNiksIDArRlBfRFNUKCVhNikKCW1vdi5sCQk0K0VYQ19GUDEoJWE2KSwgNCtGUF9EU1QoJWE2KQoJbW92LmwJCTgrRVhDX0ZQMSglYTYpLCA4K0ZQX0RTVCglYTYpCglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjJfMjoKCWZtb3ZtLngJCSYweDIwLCBGUF9EU1QoJWE2KQoJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4yXzM6CglmbW92bS54CQkmMHgxMCwgRlBfRFNUKCVhNikKCWxlYQkJRlBfRFNUKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMl80OgoJZm1vdm0ueAkJJjB4MDgsIEZQX0RTVCglYTYpCglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjJfNToKCWZtb3ZtLngJCSYweDA0LCBGUF9EU1QoJWE2KQoJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4yXzY6CglmbW92bS54CQkmMHgwMiwgRlBfRFNUKCVhNikKCWxlYQkJRlBfRFNUKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMl83OgoJZm1vdm0ueAkJJjB4MDEsIEZQX0RTVCglYTYpCglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXN0b3JlX2ZwcmVnKCk6IHN0b3JlIGFuIGZwIHZhbHVlIHRvIHRoZSBmcHJlZyBkZXNpZ25hdGVkIGQwLgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSBleHRlbmRlZCBwcmVjaXNpb24gdmFsdWUgdG8gc3RvcmUJCQkJIwojCWQwICA9IGluZGV4IG9mIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVN0b3JlIHRoZSB2YWx1ZSBpbiBmcDAgdG8gdGhlIEZQIHJlZ2lzdGVyIGRlc2lnbmF0ZWQgYnkgdGhlCSMKIyB2YWx1ZSBpbiBkMC4gVGhlIEZQIG51bWJlciBjYW4gYmUgREVOT1JNIG9yIFNOQU4gc28gd2UgaGF2ZSB0byBiZQkjCiMgY2FyZWZ1bCB0aGF0IHdlIGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGhlcmUuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc3RvcmVfZnByZWcKc3RvcmVfZnByZWc6Cgltb3YudwkJKHRibF9zdG9yZV9mcHJlZy5iLCVwYywlZDAudyoyKSwgJWQwCglqbXAJCSh0Ymxfc3RvcmVfZnByZWcuYiwlcGMsJWQwLncqMSkKCnRibF9zdG9yZV9mcHJlZzoKCXNob3J0CQlzdG9yZV9mcHJlZ18wIC0gdGJsX3N0b3JlX2ZwcmVnCglzaG9ydAkJc3RvcmVfZnByZWdfMSAtIHRibF9zdG9yZV9mcHJlZwoJc2hvcnQJCXN0b3JlX2ZwcmVnXzIgLSB0Ymxfc3RvcmVfZnByZWcKCXNob3J0CQlzdG9yZV9mcHJlZ18zIC0gdGJsX3N0b3JlX2ZwcmVnCglzaG9ydAkJc3RvcmVfZnByZWdfNCAtIHRibF9zdG9yZV9mcHJlZwoJc2hvcnQJCXN0b3JlX2ZwcmVnXzUgLSB0Ymxfc3RvcmVfZnByZWcKCXNob3J0CQlzdG9yZV9mcHJlZ182IC0gdGJsX3N0b3JlX2ZwcmVnCglzaG9ydAkJc3RvcmVfZnByZWdfNyAtIHRibF9zdG9yZV9mcHJlZwoKc3RvcmVfZnByZWdfMDoKCWZtb3ZtLngJCSYweDgwLCBFWENfRlAwKCVhNikKCXJ0cwpzdG9yZV9mcHJlZ18xOgoJZm1vdm0ueAkJJjB4ODAsIEVYQ19GUDEoJWE2KQoJcnRzCnN0b3JlX2ZwcmVnXzI6CglmbW92bS54CQkmMHgwMSwgLSglc3ApCglmbW92bS54CQkoJXNwKSssICYweDIwCglydHMKc3RvcmVfZnByZWdfMzoKCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKCWZtb3ZtLngJCSglc3ApKywgJjB4MTAKCXJ0cwpzdG9yZV9mcHJlZ180OgoJZm1vdm0ueAkJJjB4MDEsIC0oJXNwKQoJZm1vdm0ueAkJKCVzcCkrLCAmMHgwOAoJcnRzCnN0b3JlX2ZwcmVnXzU6CglmbW92bS54CQkmMHgwMSwgLSglc3ApCglmbW92bS54CQkoJXNwKSssICYweDA0CglydHMKc3RvcmVfZnByZWdfNjoKCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKCWZtb3ZtLngJCSglc3ApKywgJjB4MDIKCXJ0cwpzdG9yZV9mcHJlZ183OgoJZm1vdm0ueAkJJjB4MDEsIC0oJXNwKQoJZm1vdm0ueAkJKCVzcCkrLCAmMHgwMQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlnZXRfcGFja2VkKCk6IGZldGNoIGEgcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkgYW5kIHRoZW4JIwojCQkgICAgICBjb252ZXJ0IGl0IHRvIGEgZmxvYXRpbmctcG9pbnQgYmluYXJ5IG51bWJlci4JIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2RjYWxjX2VhKCkgLSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgPGVhPgkJCSMKIwlfbWVtX3JlYWQoKSAtIGZldGNoIHRoZSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJIwojCWZhY2NfaW5feCgpIC0gdGhlIGZldGNoIGZhaWxlZCBzbyBqdW1wIHRvIHNwZWNpYWwgZXhpdCBjb2RlCSMKIwlkZWNiaW4oKSAgICAtIGNvbnZlcnQgcGFja2VkIHRvIGJpbmFyeSBleHRlbmRlZCBwcmVjaXNpb24JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgbm8gZmFpbHVyZSBvbiBfbWVtX3JlYWQoKToJCQkJCSMKIwlGUF9TUkMoYTYpID0gcGFja2VkIG9wZXJhbmQgbm93IGFzIGEgYmluYXJ5IEZQIG51bWJlcgkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJR2V0IHRoZSBjb3JyZWN0IDxlYT4gd2hpaGMgaXMgdGhlIHZhbHVlIG9uIHRoZSBleGNlcHRpb24gc3RhY2sJIwojIGZyYW1lIHcvIG1heWJlIGEgY29ycmVjdGlvbiBmYWN0b3IgaWYgdGhlIDxlYT4gaXMgLShhbikgb3IgKGFuKSsuCSMKIyBUaGVuLCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIG1lbW9yeS4gSWYgdGhlIGZldGNoIGZhaWxzLCBleGl0CQkjCiMgdGhyb3VnaCBmYWNjX2luX3goKS4JCQkJCQkJIwojCUlmIHRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhIFpFUk8sTkFOLCBvciBJTkYsIGNvbnZlcnQgaXQgdG8JIwojIGl0cyBiaW5hcnkgcmVwcmVzZW50YXRpb24gaGVyZS4gRWxzZSwgY2FsbCBkZWNiaW4oKSB3aGljaCB3aWxsCSMKIyBjb252ZXJ0IHRoZSBwYWNrZWQgdmFsdWUgdG8gYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGJpbmFyeSB2YWx1ZS4JIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIHRoZSBzdGFja2VkIDxlYT4gZm9yIHBhY2tlZCBpcyBjb3JyZWN0IGV4Y2VwdCBmb3IgLShBbikuCiMgdGhlIGJhc2UgcmVnIG11c3QgYmUgdXBkYXRlZCBmb3IgYm90aCAtKEFuKSBhbmQgKEFuKSsuCglnbG9iYWwJCWdldF9wYWNrZWQKZ2V0X3BhY2tlZDoKCW1vdi5sCQkmMHhjLCVkMAkJIyBwYWNrZWQgaXMgMTIgYnl0ZXMKCWJzci5sCQlfZGNhbGNfZWEJCSMgZmV0Y2ggPGVhPjsgY29ycmVjdCBBbgoKCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcwoJYnNyLmwJCV9kbWVtX3JlYWQJCSMgcmVhZCBwYWNrZWQgb3BlcmFuZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KCWJuZS5sCQlmYWNjX2luX3gJCSMgeWVzCgojIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgoJYmZleHR1CQlGUF9TUkMoJWE2KXsmMTomMTV9LCVkMAkjIGdldCBleHAKCWNtcGkudwkJJWQwLCYweDdmZmYJCSMgSU5GIG9yIE5BTj8KCWJuZS5iCQlncF90cnlfemVybwkJIyBubwoJcnRzCQkJCQkjIG9wZXJhbmQgaXMgYW4gSU5GIG9yIE5BTgoKIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYSB6ZXJvIGlmIHRoZSBtYW50aXNzYSBpcyBhbGwgemVybywgZWxzZSBpdCdzCiMgYSBub3JtYWwgcGFja2VkIG9wLgpncF90cnlfemVybzoKCW1vdi5iCQkzK0ZQX1NSQyglYTYpLCVkMAkjIGdldCBieXRlIDQKCWFuZGkuYgkJJjB4MGYsJWQwCQkjIGNsZWFyIGFsbCBidXQgbGFzdCBueWJibGUKCWJuZS5iCQlncF9ub3Rfc3BlYwkJIyBub3QgYSB6ZXJvCgl0c3QubAkJRlBfU1JDX0hJKCVhNikJCSMgaXMgbHcgMiB6ZXJvPwoJYm5lLmIJCWdwX25vdF9zcGVjCQkjIG5vdCBhIHplcm8KCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQkJIyBpcyBsdyAzIHplcm8/CglibmUuYgkJZ3Bfbm90X3NwZWMJCSMgbm90IGEgemVybwoJcnRzCQkJCQkjIG9wZXJhbmQgaXMgYSBaRVJPCmdwX25vdF9zcGVjOgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHBhY2tlZCBvcAoJYnNyLmwJCWRlY2JpbgkJCSMgY29udmVydCB0byBleHRlbmRlZAoJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBkZWNiaW4oKTogQ29udmVydHMgbm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIJIwojCSAgICBhMCB0byBleHRlbmRlZC1wcmVjaXNpb24gdmFsdWUgaW4gZnAwLgkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBub3JtYWxpemVkIHBhY2tlZCBiY2QgdmFsdWUJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSBleGFjdCBmcCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFja2VkIGJjZCB2YWx1ZS4JCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUV4cGVjdGVkIGlzIGEgbm9ybWFsIGJjZCAoaS5lLiBub24tZXhjZXB0aW9uYWw7IGFsbCBpbmYsIHplcm8sCSMKIwlhbmQgTmFOIG9wZXJhbmRzIGFyZSBkaXNwYXRjaGVkIHdpdGhvdXQgZW50ZXJpbmcgdGhpcyByb3V0aW5lKQkjCiMJdmFsdWUgaW4gNjg4ODEvODgyIGZvcm1hdCBhdCBsb2NhdGlvbiAoYTApLgkJCSMKIwkJCQkJCQkJCSMKIwlBMS4gQ29udmVydCB0aGUgYmNkIGV4cG9uZW50IHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlIGFkZHMgYW5kCSMKIwltdWxzLiBTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNFLiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlCSMKIwlmb3IgdGhlIG1hbnRpc3NhIHdoaWNoIGlzIHRvIGJlIGludGVycHJldGVkIGFzIDE3IGludGVnZXIJIwojCWRpZ2l0cywgcmF0aGVyIHRoYW4gMSBpbnRlZ2VyIGFuZCAxNiBmcmFjdGlvbiBkaWdpdHMuCQkjCiMJTm90ZTogdGhpcyBvcGVyYXRpb24gY2FuIG5ldmVyIG92ZXJmbG93LgkJCSMKIwkJCQkJCQkJCSMKIwlBMi4gQ29udmVydCB0aGUgYmNkIG1hbnRpc3NhIHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlCQkjCiMJYWRkcyBhbmQgbXVscyBpbiBGUDAuIFNldCB0aGUgc2lnbiBhY2NvcmRpbmcgdG8gU00uCQkjCiMJVGhlIG1hbnRpc3NhIGRpZ2l0cyB3aWxsIGJlIGNvbnZlcnRlZCB3aXRoIHRoZSBkZWNpbWFsIHBvaW50CSMKIwlhc3N1bWVkIGZvbGxvd2luZyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgZGlnaXQuCQkJIwojCU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4JCQkjCiMJCQkJCQkJCQkjCiMJQTMuIENvdW50IHRoZSBudW1iZXIgb2YgbGVhZGluZy90cmFpbGluZyB6ZXJvcyBpbiB0aGUJCSMKIwliY2Qgc3RyaW5nLiAgSWYgU0UgaXMgcG9zaXRpdmUsIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zOwkjCiMJaWYgbmVnYXRpdmUsIGNvdW50IHRoZSB0cmFpbGluZyB6ZXJvcy4gIFNldCB0aGUgYWRqdXN0ZWQJIwojCWV4cG9uZW50IGVxdWFsIHRvIHRoZSBleHBvbmVudCBmcm9tIEExIGFuZCB0aGUgemVybyBjb3VudAkjCiMJYWRkZWQgaWYgU00gPSAxIGFuZCBzdWJ0cmFjdGVkIGlmIFNNID0gMC4gIFNjYWxlIHRoZQkJIwojCW1hbnRpc3NhIHRoZSBlcXVpdmFsZW50IG9mIGZvcmNpbmcgaW4gdGhlIGJjZCB2YWx1ZToJCSMKIwkJCQkJCQkJCSMKIwlTTSA9IDAJYSBub24temVybyBkaWdpdCBpbiB0aGUgaW50ZWdlciBwb3NpdGlvbgkJIwojCVNNID0gMQlhIG5vbi16ZXJvIGRpZ2l0IGluIE1hbnQwLCBsc2Qgb2YgdGhlIGZyYWN0aW9uCQkjCiMJCQkJCQkJCQkjCiMJdGhpcyB3aWxsIGluc3VyZSB0aGF0IGFueSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiBpdHMJCSMKIwlyZXByZXNlbnRhdGlvbiAoZXguIDAuMUUyLCAxRTEsIDEwRTAsIDEwMEUtMSksIGlzIGNvbnZlcnRlZAkjCiMJY29uc2lzdGVudGx5LgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTQuIENhbGN1bGF0ZSB0aGUgZmFjdG9yIDEwXmV4cCBpbiBGUDEgdXNpbmcgYSB0YWJsZSBvZgkJIwojCTEwXigyXm4pIHZhbHVlcy4gIFRvIHJlZHVjZSB0aGUgZXJyb3IgaW4gZm9ybWluZyBmYWN0b3JzCSMKIwlncmVhdGVyIHRoYW4gMTBeMjcsIGEgZGlyZWN0ZWQgcm91bmRpbmcgc2NoZW1lIGlzIHVzZWQgd2l0aAkjCiMJdGFibGVzIHJvdW5kZWQgdG8gUk4sIFJNLCBhbmQgUlAsIGFjY29yZGluZyB0byB0aGUgdGFibGUJIwojCWluIHRoZSBjb21tZW50cyBvZiB0aGUgcHdydGVuIHNlY3Rpb24uCQkJCSMKIwkJCQkJCQkJCSMKIwlBNS4gRm9ybSB0aGUgZmluYWwgYmluYXJ5IG51bWJlciBieSBzY2FsaW5nIHRoZSBtYW50aXNzYSBieQkjCiMJdGhlIGV4cG9uZW50IGZhY3Rvci4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyB0aGUJCSMKIwltYW50aXNzYSBpbiBGUDAgYnkgdGhlIGZhY3RvciBpbiBGUDEgaWYgdGhlIGFkanVzdGVkCQkjCiMJZXhwb25lbnQgc2lnbiBpcyBwb3NpdGl2ZSwgYW5kIGRpdmlkaW5nIEZQMCBieSBGUDEgaWYJCSMKIwlpdCBpcyBuZWdhdGl2ZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojCUNsZWFuIHVwIGFuZCByZXR1cm4uIENoZWNrIGlmIHRoZSBmaW5hbCBtdWwgb3IgZGl2IHdhcyBpbmV4YWN0LgkjCiMJSWYgc28sIHNldCBJTkVYMSBpbiBVU0VSX0ZQU1IuCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIwlQVEVOUk4sIFBURU5STSwgYW5kIFBURU5SUCBhcmUgYXJyYXlzIG9mIHBvd2VycyBvZiAxMCByb3VuZGVkCiMJdG8gbmVhcmVzdCwgbWludXMsIGFuZCBwbHVzLCByZXNwZWN0aXZlbHkuICBUaGUgdGFibGVzIGluY2x1ZGUKIwkxMCoqezEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Niw1MTIsMTAyNCwyMDQ4LDQwOTZ9LiAgTm8gcm91bmRpbmcKIwlpcyByZXF1aXJlZCB1bnRpbCB0aGUgcG93ZXIgaXMgZ3JlYXRlciB0aGFuIDI3LCBob3dldmVyLCBhbGwKIwl0YWJsZXMgaW5jbHVkZSB0aGUgZmlyc3QgNSBmb3IgZWFzZSBvZiBpbmRleGluZy4KIwpSVEFCTEU6CglieXRlCQkwLDAsMCwwCglieXRlCQkyLDMsMiwzCglieXRlCQkyLDMsMywyCglieXRlCQkzLDIsMiwzCgoJc2V0CQlGTklCUyw3CglzZXQJCUZTVFJULDAKCglzZXQJCUVTVFJULDQKCXNldAkJRURJR0lUUywyCgoJZ2xvYmFsCQlkZWNiaW4KZGVjYmluOgoJbW92LmwJCTB4MCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIG1ha2UgYSBjb3B5IG9mIGlucHV0Cgltb3YubAkJMHg0KCVhMCksRlBfU0NSMF9ISSglYTYpICMgc28gd2UgZG9uJ3QgYWx0ZXIgaXQKCW1vdi5sCQkweDgoJWEwKSxGUF9TQ1IwX0xPKCVhNikKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCgltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKCWZtb3ZtLngJCSYweDEsLSglc3ApCQkjIHNhdmUgZnAxCiMKIyBDYWxjdWxhdGUgZXhwb25lbnQ6CiMgIDEuIENvcHkgYmNkIHZhbHVlIGluIG1lbW9yeSBmb3IgdXNlIGFzIGEgd29ya2luZyBjb3B5LgojICAyLiBDYWxjdWxhdGUgYWJzb2x1dGUgdmFsdWUgb2YgZXhwb25lbnQgaW4gZDEgYnkgbXVsIGFuZCBhZGQuCiMgIDMuIENvcnJlY3QgZm9yIGV4cG9uZW50IHNpZ24uCiMgIDQuIFN1YnRyYWN0IDE2IHRvIGNvbXBlbnNhdGUgZm9yIGludGVycHJldGluZyB0aGUgbWFudCBhcyBhbGwgaW50ZWdlciBkaWdpdHMuCiMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCiMKIyBSZWdpc3RlciB1c2FnZToKIwojICBjYWxjX2U6CiMJKCopICBkMDogdGVtcCBkaWdpdCBzdG9yYWdlCiMJKCopICBkMTogYWNjdW11bGF0b3IgZm9yIGJpbmFyeSBleHBvbmVudAojCSgqKSAgZDI6IGRpZ2l0IGNvdW50CiMJKCopICBkMzogb2Zmc2V0IHBvaW50ZXIKIwkoICkgIGQ0OiBmaXJzdCB3b3JkIG9mIGJjZAojCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKIwkoICkgIGE2OiBwb2ludGVyIHRvIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSgqKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSgqKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKIwpjYWxjX2U6Cgltb3YubAkJJkVESUdJVFMsJWQyCQkjICMgb2YgbmliYmxlcyAoZGlnaXRzKSBpbiBmcmFjdGlvbiBwYXJ0Cgltb3YubAkJJkVTVFJULCVkMwkJIyBjb3VudGVyIHRvIHBpY2sgdXAgZGlnaXRzCgltb3YubAkJKCVhMCksJWQ0CQkjIGdldCBmaXJzdCB3b3JkIG9mIGJjZAoJY2xyLmwJCSVkMQkJCSMgemVybyBkMSBmb3IgYWNjdW11bGF0b3IKZV9nZDoKCW11bHUubAkJJjB4YSwlZDEJCSMgbXVsIHBhcnRpYWwgcHJvZHVjdCBieSBvbmUgZGlnaXQgcGxhY2UKCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCB0aGUgZGlnaXQgYW5kIHplcm8gZXh0ZW5kIGludG8gZDAKCWFkZC5sCQklZDAsJWQxCQkJIyBkMSA9IGQxICsgZDAKCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CglkYmYudwkJJWQyLGVfZ2QJCSMgaWYgd2UgaGF2ZSB1c2VkIGFsbCAzIGRpZ2l0cywgZXhpdCBsb29wCglidHN0CQkmMzAsJWQ0CQkJIyBnZXQgU0UKCWJlcS5iCQllX3BvcwkJCSMgZG9uJ3QgbmVnYXRlIGlmIHBvcwoJbmVnLmwJCSVkMQkJCSMgbmVnYXRlIGJlZm9yZSBzdWJ0cmFjdGluZwplX3BvczoKCXN1Yi5sCQkmMTYsJWQxCQkJIyBzdWIgdG8gY29tcGVuc2F0ZSBmb3Igc2hpZnQgb2YgbWFudAoJYmdlLmIJCWVfc2F2ZQkJCSMgaWYgc3RpbGwgcG9zLCBkbyBub3QgbmVnCgluZWcubAkJJWQxCQkJIyBub3cgbmVnYXRpdmUsIG1ha2UgcG9zIGFuZCBzZXQgU0UKCW9yLmwJCSYweDQwMDAwMDAwLCVkNAkJIyBzZXQgU0UgaW4gZDQsCglvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBpbiB3b3JraW5nIGJjZAplX3NhdmU6Cgltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGV4cCBvbiBzdGFjawojCiMKIyBDYWxjdWxhdGUgbWFudGlzc2E6CiMgIDEuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBtYW50aXNzYSBpbiBmcDAgYnkgbXVsIGFuZCBhZGQuCiMgIDIuIENvcnJlY3QgZm9yIG1hbnRpc3NhIHNpZ24uCiMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCiMKIyBSZWdpc3RlciB1c2FnZToKIwojICBjYWxjX206CiMJKCopICBkMDogdGVtcCBkaWdpdCBzdG9yYWdlCiMJKCopICBkMTogbHdvcmQgY291bnRlcgojCSgqKSAgZDI6IGRpZ2l0IGNvdW50CiMJKCopICBkMzogb2Zmc2V0IHBvaW50ZXIKIwkoICkgIGQ0OiB3b3JkcyAyIGFuZCAzIG9mIGJjZAojCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKIwkoICkgIGE2OiBwb2ludGVyIHRvIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCiMJKCApICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCiMJKCApICBMX1NDUjE6IGNvcHkgb2Ygb3JpZ2luYWwgZXhwb25lbnQgd29yZAojCmNhbGNfbToKCW1vdi5sCQkmMSwlZDEJCQkjIHdvcmQgY291bnRlciwgaW5pdCB0byAxCglmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBhY2N1bXVsYXRvcgojCiMKIyAgU2luY2UgdGhlIHBhY2tlZCBudW1iZXIgaGFzIGEgbG9uZyB3b3JkIGJldHdlZW4gdGhlIGZpcnN0ICYgc2Vjb25kIHBhcnRzLAojICBnZXQgdGhlIGludGVnZXIgZGlnaXQgdGhlbiBza2lwIGRvd24gJiBnZXQgdGhlIHJlc3Qgb2YgdGhlCiMgIG1hbnRpc3NhLiAgV2Ugd2lsbCB1bnJvbGwgdGhlIGxvb3Agb25jZS4KIwoJYmZleHR1CQkoJWEwKXsmMjg6JjR9LCVkMAkjIGludGVnZXIgcGFydCBpcyBscyBkaWdpdCBpbiBsb25nIHdvcmQKCWZhZGQuYgkJJWQwLCVmcDAJCSMgYWRkIGRpZ2l0IHRvIHN1bSBpbiBmcDAKIwojCiMgIEdldCB0aGUgcmVzdCBvZiB0aGUgbWFudGlzc2EuCiMKbG9hZGx3OgoJbW92LmwJCSglYTAsJWQxLkwqNCksJWQ0CSMgbG9hZCBtYW50aXNzYSBsb25xd29yZCBpbnRvIGQ0Cgltb3YubAkJJkZTVFJULCVkMwkJIyBjb3VudGVyIHRvIHBpY2sgdXAgZGlnaXRzCgltb3YubAkJJkZOSUJTLCVkMgkJIyByZXNldCBudW1iZXIgb2YgZGlnaXRzIHBlciBhMCBwdHIKbWQyYjoKCWZtdWwucwkJJjB4NDEyMDAwMDAsJWZwMAkjIGZwMCA9IGZwMCAqIDEwCgliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZAoJZmFkZC5iCQklZDAsJWZwMAkJIyBmcDAgPSBmcDAgKyBkaWdpdAojCiMKIyAgSWYgYWxsIHRoZSBkaWdpdHMgKDgpIGluIHRoYXQgbG9uZyB3b3JkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgKGQyPTApLAojICB0aGVuIGluYyBkMSAoPTIpIHRvIHBvaW50IHRvIHRoZSBuZXh0IGxvbmcgd29yZCBhbmQgcmVzZXQgZDMgdG8gMAojICB0byBpbml0aWFsaXplIHRoZSBkaWdpdCBvZmZzZXQsIGFuZCBzZXQgZDIgdG8gNyBmb3IgdGhlIGRpZ2l0IGNvdW50OwojICBlbHNlIGNvbnRpbnVlIHdpdGggdGhpcyBsb25nIHdvcmQuCiMKCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CglkYmYudwkJJWQyLG1kMmIJCSMgY2hlY2sgZm9yIGxhc3QgZGlnaXQgaW4gdGhpcyBsdwpuZXh0bHc6CglhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGx3IHBvaW50ZXIgaW4gbWFudGlzc2EKCWNtcC5sCQklZDEsJjIJCQkjIHRlc3QgZm9yIGxhc3QgbHcKCWJsZS5iCQlsb2FkbHcJCQkjIGlmIG5vdCwgZ2V0IGxhc3Qgb25lCiMKIyAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIG1hbnQgYW5kIG1ha2UgdGhlIHZhbHVlIGluIGZwMCB0aGUgc2FtZSBzaWduLgojCm1fc2lnbjoKCWJ0c3QJCSYzMSwoJWEwKQkJIyB0ZXN0IHNpZ24gb2YgdGhlIG1hbnRpc3NhCgliZXEuYgkJYXBfc3RfegkJCSMgaWYgY2xlYXIsIGdvIHRvIGFwcGVuZC9zdHJpcCB6ZXJvcwoJZm5lZy54CQklZnAwCQkJIyBpZiBzZXQsIG5lZ2F0ZSBmcDAKIwojIEFwcGVuZC9zdHJpcCB6ZXJvczoKIwojICBGb3IgYWRqdXN0ZWQgZXhwb25lbnRzIHdoaWNoIGhhdmUgYW4gYWJzb2x1dGUgdmFsdWUgZ3JlYXRlciB0aGFuIDI3KiwKIyAgdGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBuZWVkZWQgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYQojICBmb3IgdGhlIGFkanVzdGVkIGV4cG9uZW50LiAgVGhhdCBudW1iZXIgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBleHAKIyAgaWYgdGhlIGV4cCB3YXMgcG9zaXRpdmUsIGFuZCBhZGRlZCBpZiBpdCB3YXMgbmVnYXRpdmUuICBUaGUgcHVycG9zZQojICBvZiB0aGlzIGlzIHRvIHJlZHVjZSB0aGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IGFuZCB0aGUgcG9zc2liaWxpdHkKIyAgb2YgZXJyb3IgaW4gY2FsY3VsYXRpb24gb2YgcHdydGVuLgojCiMgIDEuIEJyYW5jaCBvbiB0aGUgc2lnbiBvZiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQuCiMgIDJwLihwb3NpdGl2ZSBleHApCiMgICAyLiBDaGVjayBNMTYgYW5kIHRoZSBkaWdpdHMgaW4gbHdvcmRzIDIgYW5kIDMgaW4gZGVjZW5kaW5nIG9yZGVyLgojICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCiMgICA0LiBTdWJ0cmFjdCB0aGUgY291bnQgZnJvbSB0aGUgZXhwLgojICAgNS4gQ2hlY2sgaWYgdGhlIGV4cCBoYXMgY3Jvc3NlZCB6ZXJvIGluICMzIGFib3ZlOyBtYWtlIHRoZSBleHAgYWJzCiMJICAgYW5kIHNldCBTRS4KIwk2LiBNdWx0aXBseSB0aGUgbWFudGlzc2EgYnkgMTAqKmNvdW50LgojICAybi4obmVnYXRpdmUgZXhwKQojICAgMi4gQ2hlY2sgdGhlIGRpZ2l0cyBpbiBsd29yZHMgMyBhbmQgMiBpbiBkZWNlbmRpbmcgb3JkZXIuCiMgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KIyAgIDQuIEFkZCB0aGUgY291bnQgdG8gdGhlIGV4cC4KIyAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgY2xlYXIgU0UuCiMgICA2LiBEaXZpZGUgdGhlIG1hbnRpc3NhIGJ5IDEwKipjb3VudC4KIwojICAqV2h5IDI3PyAgSWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IGlzIHdpdGhpbiAtMjggPCBleHBBIDwgMjgsIHRoYW4KIyAgIGFueSBhZGp1c3RtZW50IGR1ZSB0byBhcHBlbmQvc3RyaXAgemVyb3Mgd2lsbCBkcml2ZSB0aGUgcmVzdWx0YW5lCiMgICBleHBvbmVudCB0b3dhcmRzIHplcm8uICBTaW5jZSBhbGwgcHdydGVuIGNvbnN0YW50cyB3aXRoIGEgcG93ZXIKIyAgIG9mIDI3IG9yIGxlc3MgYXJlIGV4YWN0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUgdG8KIyAgIGF0dGVtcHQgdG8gbGVzc2VuIHRoZSByZXN1bHRhbnQgZXhwb25lbnQuCiMKIyBSZWdpc3RlciB1c2FnZToKIwojICBhcF9zdF96OgojCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQojCSgqKSAgZDE6IHplcm8gY291bnQKIwkoKikgIGQyOiBkaWdpdCBjb3VudAojCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCiMJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKIwkoKikgIGQ1OiBsd29yZCBjb3VudGVyCiMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQojCSggKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSggKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKIwojCiMgRmlyc3QgY2hlY2sgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBleHBvbmVudCB0byBzZWUgaWYgdGhpcwojIHJvdXRpbmUgaXMgbmVjZXNzYXJ5LiAgSWYgc28sIHRoZW4gY2hlY2sgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50CiMgYW5kIGRvIGFwcGVuZCAoKykgb3Igc3RyaXAgKC0pIHplcm9zIGFjY29yZGluZ2x5LgojIFRoaXMgc2VjdGlvbiBoYW5kbGVzIGEgcG9zaXRpdmUgYWRqdXN0ZWQgZXhwb25lbnQuCiMKYXBfc3RfejoKCW1vdi5sCQkoJXNwKSwlZDEJCSMgbG9hZCBleHBBIGZvciByYW5nZSB0ZXN0CgljbXAubAkJJWQxLCYyNwkJCSMgdGVzdCBpcyB3aXRoIDI3CglibGUudwkJcHdydGVuCQkJIyBpZiBhYnMoZXhwQSkgPDI4LCBza2lwIGFwL3N0IHplcm9zCglidHN0CQkmMzAsKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBleHAKCWJuZS5iCQlhcF9zdF9uCQkJIyBpZiBuZWcsIGdvIHRvIG5lZyBzaWRlCgljbHIubAkJJWQxCQkJIyB6ZXJvIGNvdW50IHJlZwoJbW92LmwJCSglYTApLCVkNAkJIyBsb2FkIGx3b3JkIDEgdG8gZDQKCWJmZXh0dQkJJWQ0eyYyODomNH0sJWQwCQkjIGdldCBNMTYgaW4gZDAKCWJuZS5iCQlhcF9wX2Z4CQkJIyBpZiBNMTYgaXMgbm9uLXplcm8sIGdvIGZpeCBleHAKCWFkZHEubAkJJjEsJWQxCQkJIyBpbmMgemVybyBjb3VudAoJbW92LmwJCSYxLCVkNQkJCSMgaW5pdCBsd29yZCBjb3VudGVyCgltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMiB0byBkNAoJYm5lLmIJCWFwX3BfY2wJCQkjIGlmIGx3IDIgaXMgemVybywgc2tpcCBpdAoJYWRkcS5sCQkmOCwlZDEJCQkjIGFuZCBpbmMgY291bnQgYnkgOAoJYWRkcS5sCQkmMSwlZDUJCQkjIGluYyBsd29yZCBjb3VudGVyCgltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMyB0byBkNAphcF9wX2NsOgoJY2xyLmwJCSVkMwkJCSMgaW5pdCBvZmZzZXQgcmVnCgltb3YubAkJJjcsJWQyCQkJIyBpbml0IGRpZ2l0IGNvdW50ZXIKYXBfcF9nZDoKCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCBkaWdpdAoJYm5lLmIJCWFwX3BfZngJCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBmaXggZXhwCglhZGRxLmwJCSY0LCVkMwkJCSMgcG9pbnQgdG8gbmV4dCBkaWdpdAoJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBkaWdpdCBjb3VudGVyCglkYmYudwkJJWQyLGFwX3BfZ2QJCSMgZ2V0IG5leHQgZGlnaXQKYXBfcF9meDoKCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGNvdW50ZXIgdG8gZDIKCW1vdi5sCQkoJXNwKSwlZDEJCSMgZ2V0IGFkanVzdGVkIGV4cCBmcm9tIG1lbW9yeQoJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IGNvdW50IGZyb20gZXhwCgliZ2UuYgkJYXBfcF9mbQkJCSMgaWYgc3RpbGwgcG9zLCBnbyB0byBwd3J0ZW4KCW5lZy5sCQklZDEJCQkjIG5vdyBpdHMgbmVnOyBnZXQgYWJzCgltb3YubAkJKCVhMCksJWQ0CQkjIGxvYWQgbHdvcmQgMSB0byBkNAoJb3IubAkJJjB4NDAwMDAwMDAsJWQ0CQkjIGFuZCBzZXQgU0UgaW4gZDQKCW9yLmwJCSYweDQwMDAwMDAwLCglYTApCSMgYW5kIGluIG1lbW9yeQojCiMgQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBtdWx0aXBsaWVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzdHJpcGluZyBvZgojIHplcm9zIGZyb20gdGhlIG1hbnRpc3NhLgojCmFwX3BfZm06CglsZWEubAkJUFRFTlJOKCVwYyksJWExCQkjIGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQoJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAoJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQoJbW92LmwJCSYzLCVkMgkJCSMgaW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKYXBfcF9lbDoKCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CgliY2MuYgkJYXBfcF9lbgkJCSMgaWYgMSwgbXVsIGZwMSBieSBwd3J0ZW4gZmFjdG9yCglmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKYXBfcF9lbjoKCWFkZC5sCQkmMTIsJWQzCQkJIyBpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KCWJuZS5iCQlhcF9wX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAoJZm11bC54CQklZnAxLCVmcDAJCSMgbXVsIG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQoJYnJhLmIJCXB3cnRlbgkJCSMgZ28gY2FsYyBwd3J0ZW4KIwojIFRoaXMgc2VjdGlvbiBoYW5kbGVzIGEgbmVnYXRpdmUgYWRqdXN0ZWQgZXhwb25lbnQuCiMKYXBfc3RfbjoKCWNsci5sCQklZDEJCQkjIGNsciBjb3VudGVyCgltb3YubAkJJjIsJWQ1CQkJIyBzZXQgdXAgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMwoJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDMKCWJuZS5iCQlhcF9uX2NsCQkJIyBpZiBub3QgemVybywgY2hlY2sgZGlnaXRzCglzdWIubAkJJjEsJWQ1CQkJIyBkZWMgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMgoJYWRkcS5sCQkmOCwlZDEJCQkjIGluYyBjb3VudGVyIGJ5IDgKCW1vdi5sCQkoJWEwLCVkNS5MKjQpLCVkNAkjIGdldCBsd29yZCAyCmFwX25fY2w6Cgltb3YubAkJJjI4LCVkMwkJCSMgcG9pbnQgdG8gbGFzdCBkaWdpdAoJbW92LmwJCSY3LCVkMgkJCSMgaW5pdCBkaWdpdCBjb3VudGVyCmFwX25fZ2Q6CgliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgZGlnaXQKCWJuZS5iCQlhcF9uX2Z4CQkJIyBpZiBub24temVybywgZ28gdG8gZXhwIGZpeAoJc3VicS5sCQkmNCwlZDMJCQkjIHBvaW50IHRvIHByZXZpb3VzIGRpZ2l0CglhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGRpZ2l0IGNvdW50ZXIKCWRiZi53CQklZDIsYXBfbl9nZAkJIyBnZXQgbmV4dCBkaWdpdAphcF9uX2Z4OgoJbW92LmwJCSVkMSwlZDAJCQkjIGNvcHkgY291bnRlciB0byBkMAoJbW92LmwJCSglc3ApLCVkMQkJIyBnZXQgYWRqdXN0ZWQgZXhwIGZyb20gbWVtb3J5CglzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3QgY291bnQgZnJvbSBleHAKCWJndC5iCQlhcF9uX2ZtCQkJIyBpZiBzdGlsbCBwb3MsIGdvIGZpeCBtYW50aXNzYQoJbmVnLmwJCSVkMQkJCSMgdGFrZSBhYnMgb2YgZXhwIGFuZCBjbHIgU0UKCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CglhbmQubAkJJjB4YmZmZmZmZmYsJWQ0CQkjIGFuZCBjbHIgU0UgaW4gZDQKCWFuZC5sCQkmMHhiZmZmZmZmZiwoJWEwKQkjIGFuZCBpbiBtZW1vcnkKIwojIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgYXBwZW5kaW5nIG9mCiMgemVyb3MgdG8gdGhlIG1hbnRpc3NhLgojCmFwX25fZm06CglsZWEubAkJUFRFTlJOKCVwYyksJWExCQkjIGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQoJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAoJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQoJbW92LmwJCSYzLCVkMgkJCSMgaW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKYXBfbl9lbDoKCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CgliY2MuYgkJYXBfbl9lbgkJCSMgaWYgMSwgbXVsIGZwMSBieSBwd3J0ZW4gZmFjdG9yCglmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKYXBfbl9lbjoKCWFkZC5sCQkmMTIsJWQzCQkJIyBpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KCWJuZS5iCQlhcF9uX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAoJZmRpdi54CQklZnAxLCVmcDAJCSMgZGl2IG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQojCiMKIyBDYWxjdWxhdGUgcG93ZXItb2YtdGVuIGZhY3RvciBmcm9tIGFkanVzdGVkIGFuZCBzaGlmdGVkIGV4cG9uZW50LgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMKIyAgcHdydGVuOgojCSgqKSAgZDA6IHRlbXAKIwkoICkgIGQxOiBleHBvbmVudAojCSgqKSAgZDI6IHtGUENSWzY6NV0sU00sU0V9IGFzIGluZGV4IGluIFJUQUJMRTsgdGVtcAojCSgqKSAgZDM6IEZQQ1Igd29yayBjb3B5CiMJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKIwkoKikgIGExOiBSVEFCTEUgcG9pbnRlcgojICBjYWxjX3A6CiMJKCopICBkMDogdGVtcAojCSggKSAgZDE6IGV4cG9uZW50CiMJKCopICBkMzogUFdSVHh4IHRhYmxlIGluZGV4CiMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGNvcHkgb2YgYmNkCiMJKCopICBhMTogUFdSVHh4IHBvaW50ZXIKIwkoKikgZnAxOiBwb3dlci1vZi10ZW4gYWNjdW11bGF0b3IKIwojIFB3cnRlbiBjYWxjdWxhdGVzIHRoZSBleHBvbmVudCBmYWN0b3IgaW4gdGhlIHNlbGVjdGVkIHJvdW5kaW5nIG1vZGUKIyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZToKIwojCVNpZ24gb2YgTWFudCAgU2lnbiBvZiBFeHAgIFJvdW5kaW5nIE1vZGUgIFBXUlRFTiBSb3VuZGluZyBNb2RlCiMKIwlBTlkJICBBTlkJUk4JUk4KIwojCSArCSAgICsJUlAJUlAKIwkgLQkgICArCVJQCVJNCiMJICsJICAgLQlSUAlSTQojCSAtCSAgIC0JUlAJUlAKIwojCSArCSAgICsJUk0JUk0KIwkgLQkgICArCVJNCVJQCiMJICsJICAgLQlSTQlSUAojCSAtCSAgIC0JUk0JUk0KIwojCSArCSAgICsJUloJUk0KIwkgLQkgICArCVJaCVJNCiMJICsJICAgLQlSWglSUAojCSAtCSAgIC0JUloJUlAKIwojCnB3cnRlbjoKCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDMJIyBnZXQgdXNlcidzIEZQQ1IKCWJmZXh0dQkJJWQzeyYyNjomMn0sJWQyCQkjIGlzb2xhdGUgcm91bmRpbmcgbW9kZSBiaXRzCgltb3YubAkJKCVhMCksJWQ0CQkjIHJlbG9hZCAxc3QgYmNkIHdvcmQgdG8gZDQKCWFzbC5sCQkmMiwlZDIJCQkjIGZvcm1hdCBkMiB0byBiZQoJYmZleHR1CQklZDR7JjA6JjJ9LCVkMAkJIyB7RlBDUls2XSxGUENSWzVdLFNNLFNFfQoJYWRkLmwJCSVkMCwlZDIJCQkjIGluIGQyIGFzIGluZGV4IGludG8gUlRBQkxFCglsZWEubAkJUlRBQkxFKCVwYyksJWExCQkjIGxvYWQgcnRhYmxlIGJhc2UKCW1vdi5iCQkoJWExLCVkMiksJWQwCQkjIGxvYWQgbmV3IHJvdW5kaW5nIGJpdHMgZnJvbSB0YWJsZQoJY2xyLmwJCSVkMwkJCSMgY2xlYXIgZDMgdG8gZm9yY2Ugbm8gZXhjIGFuZCBleHRlbmRlZAoJYmZpbnMJCSVkMCwlZDN7JjI2OiYyfQkJIyBzdHVmZiBuZXcgcm91bmRpbmcgYml0cyBpbiBGUENSCglmbW92LmwJCSVkMywlZnBjcgkJIyB3cml0ZSBuZXcgRlBDUgoJYXNyLmwJCSYxLCVkMAkJCSMgd3JpdGUgY29ycmVjdCBQVEVOeHggdGFibGUKCWJjYy5iCQlub3RfcnAJCQkjIHRvIGExCglsZWEubAkJUFRFTlJQKCVwYyksJWExCQkjIGl0IGlzIFJQCglicmEuYgkJY2FsY19wCQkJIyBnbyB0byBpbml0IHNlY3Rpb24Kbm90X3JwOgoJYXNyLmwJCSYxLCVkMAkJCSMga2VlcCBjaGVja2luZwoJYmNjLmIJCW5vdF9ybQoJbGVhLmwJCVBURU5STSglcGMpLCVhMQkJIyBpdCBpcyBSTQoJYnJhLmIJCWNhbGNfcAkJCSMgZ28gdG8gaW5pdCBzZWN0aW9uCm5vdF9ybToKCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgaXQgaXMgUk4KY2FsY19wOgoJbW92LmwJCSVkMSwlZDAJCQkjIGNvcHkgZXhwIHRvIGQwO3VzZSBkMAoJYnBsLmIJCW5vX25lZwkJCSMgaWYgZXhwIGlzIG5lZ2F0aXZlLAoJbmVnLmwJCSVkMAkJCSMgaW52ZXJ0IGl0Cglvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBzZXQgU0UgYml0Cm5vX25lZzoKCWNsci5sCQklZDMJCQkjIHRhYmxlIGluZGV4CglmbW92LnMJCSYweDNmODAwMDAwLCVmcDEJIyBpbml0IGZwMSB0byAxCmVfbG9vcDoKCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKCWJjYy5iCQllX25leHQJCQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAoJZm11bC54CQkoJWExLCVkMyksJWZwMQkJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCmVfbmV4dDoKCWFkZC5sCQkmMTIsJWQzCQkJIyBpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KCWJuZS5iCQllX2xvb3AJCQkjIG5vdCB6ZXJvLCBjb250aW51ZSBzaGlmdGluZwojCiMKIyAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZQojICBzYW1lIHNpZ24uIElmIHRoZSBleHAgd2FzIHBvcyB0aGVuIG11bHRpcGx5IGZwMSpmcDA7CiMgIGVsc2UgZGl2aWRlIGZwMC9mcDEuCiMKIyBSZWdpc3RlciBVc2FnZToKIyAgbm9ybToKIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCiMJKCopIGZwMDogbWFudGlzc2EgYWNjdW11bGF0b3IKIwkoICkgZnAxOiBzY2FsaW5nIGZhY3RvciAtIDEwKiooYWJzKGV4cCkpCiMKcG5vcm06CglidHN0CQkmMzAsKCVhMCkJCSMgdGVzdCB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKCWJlcS5iCQltdWwJCQkjIGlmIGNsZWFyLCBnbyB0byBtdWx0aXBseQpkaXY6CglmZGl2LngJCSVmcDEsJWZwMAkJIyBleHAgaXMgbmVnYXRpdmUsIHNvIGRpdmlkZSBtYW50IGJ5IGV4cAoJYnJhLmIJCWVuZF9kZWMKbXVsOgoJZm11bC54CQklZnAxLCVmcDAJCSMgZXhwIGlzIHBvc2l0aXZlLCBzbyBtdWx0aXBseSBieSBleHAKIwojCiMgQ2xlYW4gdXAgYW5kIHJldHVybiB3aXRoIHJlc3VsdCBpbiBmcDAuCiMKIyBJZiB0aGUgZmluYWwgbXVsL2RpdiBpbiBkZWNiaW4gaW5jdXJyZWQgYW4gaW5leCBleGNlcHRpb24sCiMgaXQgd2lsbCBiZSBpbmV4MiwgYnV0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgaW5leDEgYnkgZ2V0X29wLgojCmVuZF9kZWM6CglmbW92LmwJCSVmcHNyLCVkMAkJIyBnZXQgc3RhdHVzIHJlZ2lzdGVyCgliY2xyCQkmaW5leDJfYml0KzgsJWQwCSMgdGVzdCBmb3IgaW5leDIgYW5kIGNsZWFyIGl0CgliZXEuYgkJbm9fZXhjCQkJIyBza2lwIHRoaXMgaWYgbm8gZXhjCglvcmkudwkJJmlueDFhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMS9BSU5FWApub19leGM6CglhZGQubAkJJjB4NCwlc3AJCSMgY2xlYXIgMSBsdyBwYXJhbQoJZm1vdm0ueAkJKCVzcCkrLCYweDQwCQkjIHJlc3RvcmUgZnAxCgltb3ZtLmwJCSglc3ApKywmMHgzYwkJIyByZXN0b3JlIGQyLWQ1CglmbW92LmwJCSYweDAsJWZwY3IKCWZtb3YubAkJJjB4MCwlZnBzcgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgYmluZGVjKCk6IENvbnZlcnRzIGFuIGlucHV0IGluIGV4dGVuZGVkIHByZWNpc2lvbiBmb3JtYXQgdG8gYmNkIGZvcm1hdCMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byB0aGUgaW5wdXQgZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlIGluIG1lbW9yeS4JIwojCSAgICAgdGhlIGlucHV0IG1heSBiZSBlaXRoZXIgbm9ybWFsaXplZCwgdW5ub3JtYWxpemVkLCBvcgkjCiMJICAgICBkZW5vcm1hbGl6ZWQuCQkJCQkJIwojCWQwID0gY29udGFpbnMgdGhlIGstZmFjdG9yIHNpZ24tZXh0ZW5kZWQgdG8gMzItYml0cy4JCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjAoYTYpID0gYmNkIGZvcm1hdCByZXN1bHQgb24gdGhlIHN0YWNrLgkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCQkJCQkJCQkJIwojCUExLglTZXQgUk0gYW5kIHNpemUgZXh0OyAgU2V0IFNJR01BID0gc2lnbiBvZiBpbnB1dC4JIwojCQlUaGUgay1mYWN0b3IgaXMgc2F2ZWQgZm9yIHVzZSBpbiBkNy4gQ2xlYXIgdGhlCQkjCiMJCUJJTkRFQ19GTEcgZm9yIHNlcGFyYXRpbmcgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQJIwojCQlpbnB1dC4gIElmIGlucHV0IGlzIHVubm9ybWFsaXplZCBvciBkZW5vcm1hbGl6ZWQsCSMKIwkJbm9ybWFsaXplIGl0LgkJCQkJCSMKIwkJCQkJCQkJCSMKIwlBMi4JU2V0IFggPSBhYnMoaW5wdXQpLgkJCQkJIwojCQkJCQkJCQkJIwojCUEzLglDb21wdXRlIElMT0cuCQkJCQkJIwojCQlJTE9HIGlzIHRoZSBsb2cgYmFzZSAxMCBvZiB0aGUgaW5wdXQgdmFsdWUuICBJdCBpcwkjCiMJCWFwcHJveGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbAkjCiMJCXZhbHVlIGlzIHZpZXdlZCBhcyAyXl5lICogMS5mIGluIGV4dGVuZGVkIHByZWNpc2lvbi4JIwojCQlUaGlzIHZhbHVlIGlzIHN0b3JlZCBpbiBkNi4JCQkJIwojCQkJCQkJCQkJIwojCUE0LglDbHIgSU5FWCBiaXQuCQkJCQkJIwojCQlUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4JCSMKIwkJCQkJCQkJCSMKIwlBNS4JU2V0IElDVFIgPSAwOwkJCQkJCSMKIwkJSUNUUiBpcyBhIGZsYWcgdXNlZCBpbiBBMTMuICBJdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCSMKIwkJbG9vcCBlbnRyeSBBNi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTYuCUNhbGN1bGF0ZSBMRU4uCQkJCQkJIwojCQlMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlCSMKIwkJay1mYWN0b3IgY2FuIGRpY3RhdGUgZWl0aGVyIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzLAkjCiMJCWlmIGl0IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCBvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cwkjCiMJCWFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcwkjCiMJCXNpZ25pZmljYW50LiAgU2VlIHRoZSA2ODg4MiBtYW51YWwgZm9yIGV4YW1wbGVzLgkjCiMJCUlmIExFTiBpcyBjb21wdXRlZCB0byBiZSBncmVhdGVyIHRoYW4gMTcsIHNldCBPUEVSUiBpbgkjCiMJCVVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCQkJIwojCQkJCQkJCQkJIwojCUE3LglDYWxjdWxhdGUgU0NBTEUuCQkJCQkjCiMJCVNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIJIwojCQlvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cwkjCiMJCWluIHRoZSBvdXRwdXQgYmVmb3JlIGNvbnZlcnNpb24gdG8gYmNkLiBMQU1CREEgaXMgdGhlCSMKIwkJc2lnbiBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuIEZwMSBjb250YWlucwkJIwojCQkxMF5eKGFicyhJU0NBTEUpKSB1c2luZyBhIHJvdW5kaW5nIG1vZGUgd2hpY2ggaXMgYQkjCiMJCWZ1bmN0aW9uIG9mIHRoZSBvcmlnaW5hbCByb3VuZGluZyBtb2RlIGFuZCB0aGUgc2lnbnMJIwojCQlvZiBJU0NBTEUgYW5kIFguICBBIHRhYmxlIGlzIGdpdmVuIGluIHRoZSBjb2RlLgkJIwojCQkJCQkJCQkJIwojCUE4LglDbHIgSU5FWDsgRm9yY2UgUlouCQkJCQkjCiMJCVRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgkJIwojCQlSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQkjCiMJCW9ubHkgb25lIHJvdW5kaW5nIGVycm9yLiAgVGhlIGdycyBiaXRzIGFyZSBjb2xsZWN0ZWQgaW4gIwojCQl0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgkJCQkjCiMJCQkJCQkJCQkjCiMJQTkuCVNjYWxlIFggLT4gWS4JCQkJCQkjCiMJCVRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mCQkjCiMJCXNpZ25pZmljYW50IGRpZ2l0cy4gIFRoZSBleGNlc3MgZGlnaXRzIGFyZSBjb2xsZWN0ZWQJIwojCQlpbiBJTkVYMi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTEwLglPciBpbiBJTkVYLgkJCQkJCSMKIwkJSWYgSU5FWCBpcyBzZXQsIHJvdW5kIGVycm9yIG9jY3VycmVkLiAgVGhpcyBpcwkJIwojCQljb21wZW5zYXRlZCBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8JIwojCQl0aGUgbHNiIG9mIFkuCQkJCQkJIwojCQkJCQkJCQkJIwojCUExMS4JUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCQkJIwojCQlQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4JIwojCQlLZWVwIHRoZSBzaXplIHRvIGV4dGVuZGVkLgkJCQkjCiMJCQkJCQkJCQkjCiMJQTEyLglDYWxjdWxhdGUgWUlOVCA9IEZJTlQoWSkgYWNjb3JkaW5nIHRvIHVzZXIncyByb3VuZGluZwkjCiMJCW1vZGUuICBUaGUgRlBTUCByb3V0aW5lIHNpbnRkMCBpcyB1c2VkLiAgVGhlIG91dHB1dAkjCiMJCWlzIGluIGZwMC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTEzLglDaGVjayBmb3IgTEVOIGRpZ2l0cy4JCQkJCSMKIwkJSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywJIwojCQlvciBsZXNzIHRoYW4gTEVOIC0xIGRpZ2l0cywgYWRqdXN0IElMT0cgYW5kIHJlcGVhdCBmcm9tCSMKIwkJQTYuICBUaGlzIHRlc3Qgb2NjdXJzIG9ubHkgb24gdGhlIGZpcnN0IHBhc3MuICBJZiB0aGUJIwojCQlyZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUJIwojCQl0aGUgbWFudGlzc2EgYnkgMTAuCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTE0LglDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCQkJCSMKIwkJVGhlIGJpbnN0ciByb3V0aW5lIGlzIHVzZWQgdG8gY29udmVydCB0aGUgTEVOIGRpZ2l0CSMKIwkJbWFudGlzc2EgdG8gYmNkIGluIG1lbW9yeS4gIFRoZSBpbnB1dCB0byBiaW5zdHIgaXMJIwojCQl0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAkjCiMJCXN1Y2ggdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiBiaXQgNjMuCSMKIwkJVGhlIGJjZCBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbgkjCiMJCXRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCQkJIwojCQkJCQkJCQkJIwojCUExNS4JQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgkJCQkjCiMJCUFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUJIwojCQlkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgkJCSMKIwkJVGVzdCB0aGUgbGVuZ3RoIG9mIHRoZSBmaW5hbCBleHBvbmVudCBzdHJpbmcuICBJZiB0aGUJIwojCQlsZW5ndGggaXMgNCwgc2V0IG9wZXJyLgkJCQkJIwojCQkJCQkJCQkJIwojCUExNi4JV3JpdGUgc2lnbiBiaXRzIHRvIGZpbmFsIHN0cmluZy4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnNldAlCSU5ERUNfRkxHLAlFWENfVEVNUAkjIERFTk9STSBmbGFnCgojIENvbnN0YW50cyBpbiBleHRlbmRlZCBwcmVjaXNpb24KUExPRzI6Cglsb25nCQkweDNGRkQwMDAwLDB4OUEyMDlBODQsMHhGQkNGRjc5OCwweDAwMDAwMDAwClBMT0cyVVAxOgoJbG9uZwkJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTksMHgwMDAwMDAwMAoKIyBDb25zdGFudHMgaW4gc2luZ2xlIHByZWNpc2lvbgpGT05FOgoJbG9uZwkJMHgzRjgwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApGVFdPOgoJbG9uZwkJMHg0MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApGVEVOOgoJbG9uZwkJMHg0MTIwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApGNDkzMzoKCWxvbmcJCTB4NDU5QTI4MDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKClJCRFRCTDoKCWJ5dGUJCTAsMCwwLDAKCWJ5dGUJCTMsMywyLDIKCWJ5dGUJCTMsMiwyLDMKCWJ5dGUJCTIsMywzLDIKCiMJSW1wbGVtZW50YXRpb24gTm90ZXM6CiMKIwlUaGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGFzIGZvbGxvd3M6CiMKIwkJZDA6IHNjcmF0Y2g7IExFTiBpbnB1dCB0byBiaW5zdHIKIwkJZDE6IHNjcmF0Y2gKIwkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgbWFudGlzc2EgZm9yIGJpbnN0cgojCQlkMzogc2NyYXRjaDtsb3dlciAzMi1iaXRzIG9mIG1hbnRpc3NhIGZvciBiaW5zdHIKIwkJZDQ6IExFTgojCQlkNTogTEFNQkRBL0lDVFIKIwkJZDY6IElMT0cKIwkJZDc6IGstZmFjdG9yCiMJCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CiMJCWExOiBzY3JhdGNoIHBvaW50ZXIKIwkJYTI6IHBvaW50ZXIgdG8gRlBfWDsgYWJzKG9yaWdpbmFsIHZhbHVlKSBpbiBleHQKIwkJZnAwOiBzY3JhdGNoCiMJCWZwMTogc2NyYXRjaAojCQlmcDI6IHNjcmF0Y2gKIwkJRl9TQ1IxOgojCQlGX1NDUjI6CiMJCUxfU0NSMToKIwkJTF9TQ1IyOgoKCWdsb2JhbAkJYmluZGVjCmJpbmRlYzoKCW1vdm0ubAkJJjB4M2YyMCwtKCVzcCkJIyAgeyVkMi0lZDcvJWEyfQoJZm1vdm0ueAkJJjB4NywtKCVzcCkJIyAgeyVmcDAtJWZwMn0KCiMgQTEuIFNldCBSTSBhbmQgc2l6ZSBleHQuIFNldCBTSUdNQSA9IHNpZ24gaW5wdXQ7CiMgICAgIFRoZSBrLWZhY3RvciBpcyBzYXZlZCBmb3IgdXNlIGluIGQ3LiAgQ2xlYXIgQklOREVDX0ZMRyBmb3IKIyAgICAgc2VwYXJhdGluZyAgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQgaW5wdXQuICBJZiB0aGUgaW5wdXQKIyAgICAgaXMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyLCBzZXQgdGhlIEJJTkRFQ19GTEcgbWVtb3J5IHdvcmQKIyAgICAgdG8gc2lnbmFsIGRlbm9ybS4gIElmIHRoZSBpbnB1dCBpcyB1bm5vcm1hbGl6ZWQsIG5vcm1hbGl6ZQojICAgICB0aGUgaW5wdXQgYW5kIHRlc3QgZm9yIGRlbm9ybWFsaXplZCByZXN1bHQuCiMKCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBSTSBhbmQgZXh0Cgltb3YubAkJKCVhMCksTF9TQ1IyKCVhNikJIyBzYXZlIGV4cG9uZW50IGZvciBzaWduIGNoZWNrCgltb3YubAkJJWQwLCVkNwkJIyBtb3ZlIGstZmFjdG9yIHRvIGQ3CgoJY2xyLmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNsciBub3JtL2Rlbm9ybSBmbGFnCgljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNICMgaXMgaW5wdXQgYSBERU5PUk0/CglibmUudwkJQTJfc3RyCQkjIG5vOyBpbnB1dCBpcyBhIE5PUk0KCiMKIyBOb3JtYWxpemUgdGhlIGRlbm9ybQojCnVuX2RlX25vcm06Cgltb3YudwkJKCVhMCksJWQwCglhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCgltb3YubAkJNCglYTApLCVkMQoJbW92LmwJCTgoJWEwKSwlZDIKbm9ybV9sb29wOgoJc3ViLncJCSYxLCVkMAoJbHNsLmwJCSYxLCVkMgoJcm94bC5sCQkmMSwlZDEKCXRzdC5sCQklZDEKCWJnZS5iCQlub3JtX2xvb3AKIwojIFRlc3QgaWYgdGhlIG5vcm1hbGl6ZWQgaW5wdXQgaXMgZGVub3JtYWxpemVkCiMKCXRzdC53CQklZDAKCWJndC5iCQlwb3NfZXhwCQkjIGlmIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCBpcyBhIG5vcm0KCXN0CQlCSU5ERUNfRkxHKCVhNikJIyBzZXQgZmxhZyBmb3IgZGVub3JtCnBvc19leHA6CglhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCgltb3YudwkJJWQwLCglYTApCgltb3YubAkJJWQxLDQoJWEwKQoJbW92LmwJCSVkMiw4KCVhMCkKCiMgQTIuIFNldCBYID0gYWJzKGlucHV0KS4KIwpBMl9zdHI6Cgltb3YubAkJKCVhMCksRlBfU0NSMSglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCgltb3YubAkJNCglYTApLEZQX1NDUjErNCglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCgltb3YubAkJOCglYTApLEZQX1NDUjErOCglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCglhbmQubAkJJjB4N2ZmZmZmZmYsRlBfU0NSMSglYTYpCSMgY3JlYXRlIGFicyhYKQoKIyBBMy4gQ29tcHV0ZSBJTE9HLgojICAgICBJTE9HIGlzIHRoZSBsb2cgYmFzZSAxMCBvZiB0aGUgaW5wdXQgdmFsdWUuICBJdCBpcyBhcHByb3gtCiMgICAgIGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcyB2aWV3ZWQKIyAgICAgYXMgMl5eZSAqIDEuZiBpbiBleHRlbmRlZCBwcmVjaXNpb24uICBUaGlzIHZhbHVlIGlzIHN0b3JlZAojICAgICBpbiBkNi4KIwojIFJlZ2lzdGVyIHVzYWdlOgojCUlucHV0L091dHB1dAojCWQwOiBrLWZhY3Rvci9leHBvbmVudAojCWQyOiB4L3gKIwlkMzogeC94CiMJZDQ6IHgveAojCWQ1OiB4L3gKIwlkNjogeC9JTE9HCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CiMJYTE6IHgveAojCWEyOiB4L3gKIwlmcDA6IHgvZmxvYXQoSUxPRykKIwlmcDE6IHgveAojCWZwMjogeC94CiMJRl9TQ1IxOngveAojCUZfU0NSMjpBYnMoWCkvQWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQKIwlMX1NDUjE6eC94CiMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCgoJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KCWJlcS5iCQlBM19jb250CQkjIGlmIGNsciwgY29udGludWUgd2l0aCBub3JtCgltb3YubAkJJi00OTMzLCVkNgkjIGZvcmNlIElMT0cgPSAtNDkzMwoJYnJhLmIJCUE0X3N0cgpBM19jb250OgoJbW92LncJCUZQX1NDUjEoJWE2KSwlZDAJIyBtb3ZlIGV4cCB0byBkMAoJbW92LncJCSYweDNmZmYsRlBfU0NSMSglYTYpCSMgcmVwbGFjZSBleHBvbmVudCB3aXRoIDB4M2ZmZgoJZm1vdi54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIG5vdyBmcDAgaGFzIDEuZgoJc3ViLncJCSYweDNmZmYsJWQwCSMgc3RyaXAgb2ZmIGJpYXMKCWZhZGQudwkJJWQwLCVmcDAJIyBhZGQgaW4gZXhwCglmc3ViLnMJCUZPTkUoJXBjKSwlZnAwCSMgc3VidHJhY3Qgb2ZmIDEuMAoJZmJnZS53CQlwb3NfcmVzCQkjIGlmIHBvcywgYnJhbmNoCglmbXVsLngJCVBMT0cyVVAxKCVwYyksJWZwMAkjIGlmIG5lZywgbXVsIGJ5IExPRzJVUDEKCWZtb3YubAkJJWZwMCwlZDYJIyBwdXQgSUxPRyBpbiBkNiBhcyBhIGx3b3JkCglicmEuYgkJQTRfc3RyCQkjIGdvIG1vdmUgb3V0IElMT0cKcG9zX3JlczoKCWZtdWwueAkJUExPRzIoJXBjKSwlZnAwCSMgaWYgcG9zLCBtdWwgYnkgTE9HMgoJZm1vdi5sCQklZnAwLCVkNgkjIHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKCgojIEE0LiBDbHIgSU5FWCBiaXQuCiMgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgoKQTRfc3RyOgoJZm1vdi5sCQkmMCwlZnBzcgkjIHplcm8gYWxsIG9mIGZwc3IgLSBub3RoaW5nIG5lZWRlZAoKCiMgQTUuIFNldCBJQ1RSID0gMDsKIyAgICAgSUNUUiBpcyBhIGZsYWcgdXNlZCBpbiBBMTMuICBJdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCiMgICAgIGxvb3AgZW50cnkgQTYuIFRoZSBsb3dlciB3b3JkIG9mIGQ1IGlzIHVzZWQgZm9yIElDVFIuCgoJY2xyLncJCSVkNQkJIyBjbGVhciBJQ1RSCgojIEE2LiBDYWxjdWxhdGUgTEVOLgojICAgICBMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlIGstZmFjdG9yCiMgICAgIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywgaWYgaXQgaXMKIyAgICAgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQojICAgICBvcmlnaW5hbCBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcwojICAgICBzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4KIyAgICAgSWYgTEVOIGlzIGNvbXB1dGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAxNywgc2V0IE9QRVJSIGluCiMgICAgIFVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCiMKIyBSZWdpc3RlciB1c2FnZToKIwlJbnB1dC9PdXRwdXQKIwlkMDogZXhwb25lbnQvVW5jaGFuZ2VkCiMJZDI6IHgveC9zY3JhdGNoCiMJZDM6IHgveAojCWQ0OiBleGMgcGljdHVyZS9MRU4KIwlkNTogSUNUUi9VbmNoYW5nZWQKIwlkNjogSUxPRy9VbmNoYW5nZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKIwlhMTogeC94CiMJYTI6IHgveAojCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCiMJZnAxOiB4L3gKIwlmcDI6IHgveAojCUZfU0NSMTp4L3gKIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCiMJTF9TQ1IxOngveAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTZfc3RyOgoJdHN0LmwJCSVkNwkJIyBicmFuY2ggb24gc2lnbiBvZiBrCglibGUuYgkJa19uZWcJCSMgaWYgayA8PSAwLCBMRU4gPSBJTE9HICsgMSAtIGsKCW1vdi5sCQklZDcsJWQ0CQkjIGlmIGsgPiAwLCBMRU4gPSBrCglicmEuYgkJbGVuX2NrCQkjIHNraXAgdG8gTEVOIGNoZWNrCmtfbmVnOgoJbW92LmwJCSVkNiwlZDQJCSMgZmlyc3QgbG9hZCBJTE9HIHRvIGQ0CglzdWIubAkJJWQ3LCVkNAkJIyBzdWJ0cmFjdCBvZmYgawoJYWRkcS5sCQkmMSwlZDQJCSMgYWRkIGluIHRoZSAxCmxlbl9jazoKCXRzdC5sCQklZDQJCSMgTEVOIGNoZWNrOiBicmFuY2ggb24gc2lnbiBvZiBMRU4KCWJsZS5iCQlMRU5fbmcJCSMgaWYgbmVnLCBzZXQgTEVOID0gMQoJY21wLmwJCSVkNCwmMTcJCSMgdGVzdCBpZiBMRU4gPiAxNwoJYmxlLmIJCUE3X3N0cgkJIyBpZiBub3QsIGZvcmdldCBpdAoJbW92LmwJCSYxNywlZDQJCSMgc2V0IG1heCBMRU4gPSAxNwoJdHN0LmwJCSVkNwkJIyBpZiBuZWdhdGl2ZSwgbmV2ZXIgc2V0IE9QRVJSCglibGUuYgkJQTdfc3RyCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQoJb3IubAkJJm9wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikJIyBzZXQgT1BFUlIgJiBBSU9QIGluIFVTRVJfRlBTUgoJYnJhLmIJCUE3X3N0cgkJIyBmaW5pc2hlZCBoZXJlCkxFTl9uZzoKCW1vdi5sCQkmMSwlZDQJCSMgbWluIExFTiBpcyAxCgoKIyBBNy4gQ2FsY3VsYXRlIFNDQUxFLgojICAgICBTQ0FMRSBpcyBlcXVhbCB0byAxMF5JU0NBTEUsIHdoZXJlIElTQ0FMRSBpcyB0aGUgbnVtYmVyCiMgICAgIG9mIGRlY2ltYWwgcGxhY2VzIG5lZWRlZCB0byBpbnN1cmUgTEVOIGludGVnZXIgZGlnaXRzCiMgICAgIGluIHRoZSBvdXRwdXQgYmVmb3JlIGNvbnZlcnNpb24gdG8gYmNkLiBMQU1CREEgaXMgdGhlIHNpZ24KIyAgICAgb2YgSVNDQUxFLCB1c2VkIGluIEE5LiAgRnAxIGNvbnRhaW5zIDEwXl4oYWJzKElTQ0FMRSkpIHVzaW5nCiMgICAgIHRoZSByb3VuZGluZyBtb2RlIGFzIGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHNlZQojICAgICBDb29uZW4sIHAuIDcuMjMgYXMgcmVmLjsgaG93ZXZlciwgdGhlIFNDQUxFIHZhcmlhYmxlIGlzCiMgICAgIG9mIG9wcG9zaXRlIHNpZ24gaW4gYmluZGVjLnNhIGZyb20gQ29vbmVuKS4KIwojCUluaXRpYWwJCQkJCVVTRQojCUZQQ1JbNjo1XQlMQU1CREEJU0lHTihYKQkJRlBDUls2OjVdCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCSBSTgkwMAkgICAwCSAgIDAJCTAwLzAJUk4KIwkgUk4JMDAJICAgMAkgICAxCQkwMC8wCVJOCiMJIFJOCTAwCSAgIDEJICAgMAkJMDAvMAlSTgojCSBSTgkwMAkgICAxCSAgIDEJCTAwLzAJUk4KIwkgUloJMDEJICAgMAkgICAwCQkxMS8zCVJQCiMJIFJaCTAxCSAgIDAJICAgMQkJMTEvMwlSUAojCSBSWgkwMQkgICAxCSAgIDAJCTEwLzIJUk0KIwkgUloJMDEJICAgMQkgICAxCQkxMC8yCVJNCiMJIFJNCTEwCSAgIDAJICAgMAkJMTEvMwlSUAojCSBSTQkxMAkgICAwCSAgIDEJCTEwLzIJUk0KIwkgUk0JMTAJICAgMQkgICAwCQkxMC8yCVJNCiMJIFJNCTEwCSAgIDEJICAgMQkJMTEvMwlSUAojCSBSUAkxMQkgICAwCSAgIDAJCTEwLzIJUk0KIwkgUlAJMTEJICAgMAkgICAxCQkxMS8zCVJQCiMJIFJQCTExCSAgIDEJICAgMAkJMTEvMwlSUAojCSBSUAkxMQkgICAxCSAgIDEJCTEwLzIJUk0KIwojIFJlZ2lzdGVyIHVzYWdlOgojCUlucHV0L091dHB1dAojCWQwOiBleHBvbmVudC9zY3JhdGNoIC0gZmluYWwgaXMgMAojCWQyOiB4LzAgb3IgMjQgZm9yIEE5CiMJZDM6IHgvc2NyYXRjaCAtIG9mZnNldCBwdHIgaW50byBQVEVOUk0gYXJyYXkKIwlkNDogTEVOL1VuY2hhbmdlZAojCWQ1OiAwL0lDVFI6TEFNQkRBCiMJZDY6IElMT0cvSUxPRyBvciBrIGlmICgoazw9MCkmKElMT0c8aykpCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CiMJYTE6IHgvcHRyIHRvIFBURU5STSBhcnJheQojCWEyOiB4L3gKIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAojCWZwMTogeC8xMF5JU0NBTEUKIwlmcDI6IHgveAojCUZfU0NSMTp4L3gKIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCiMJTF9TQ1IxOngveAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTdfc3RyOgoJdHN0LmwJCSVkNwkJIyB0ZXN0IHNpZ24gb2YgawoJYmd0LmIJCWtfcG9zCQkjIGlmIHBvcyBhbmQgPiAwLCBza2lwIHRoaXMKCWNtcC5sCQklZDcsJWQ2CQkjIHRlc3QgayAtIElMT0cKCWJsdC5iCQlrX3BvcwkJIyBpZiBJTE9HID49IGssIHNraXAgdGhpcwoJbW92LmwJCSVkNywlZDYJCSMgaWYgKChrPDApICYgKElMT0cgPCBrKSkgSUxPRyA9IGsKa19wb3M6Cgltb3YubAkJJWQ2LCVkMAkJIyBjYWxjIElMT0cgKyAxIC0gTEVOIGluIGQwCglhZGRxLmwJCSYxLCVkMAkJIyBhZGQgdGhlIDEKCXN1Yi5sCQklZDQsJWQwCQkjIHN1YiBvZmYgTEVOCglzd2FwCQklZDUJCSMgdXNlIHVwcGVyIHdvcmQgb2YgZDUgZm9yIExBTUJEQQoJY2xyLncJCSVkNQkJIyBzZXQgaXQgemVybyBpbml0aWFsbHkKCWNsci53CQklZDIJCSMgc2V0IHVwIGQyIGZvciB2ZXJ5IHNtYWxsIGNhc2UKCXRzdC5sCQklZDAJCSMgdGVzdCBzaWduIG9mIElTQ0FMRQoJYmdlLmIJCWlzY2FsZQkJIyBpZiBwb3MsIHNraXAgbmV4dCBpbnN0CglhZGRxLncJCSYxLCVkNQkJIyBpZiBuZWcsIHNldCBMQU1CREEgdHJ1ZQoJY21wLmwJCSVkMCwmMHhmZmZmZWNkNAkjIHRlc3QgaXNjYWxlIDw9IC00OTA4CgliZ3QuYgkJbm9faW5mCQkjIGlmIGZhbHNlLCBza2lwIHJlc3QKCWFkZC5sCQkmMjQsJWQwCQkjIGFkZCBpbiAyNCB0byBpc2NhbGUKCW1vdi5sCQkmMjQsJWQyCQkjIHB1dCAyNCBpbiBkMiBmb3IgQTkKbm9faW5mOgoJbmVnLmwJCSVkMAkJIyBhbmQgdGFrZSBhYnMgb2YgSVNDQUxFCmlzY2FsZToKCWZtb3YucwkJRk9ORSglcGMpLCVmcDEJIyBpbml0IGZwMSB0byAxCgliZmV4dHUJCVVTRVJfRlBDUiglYTYpeyYyNjomMn0sJWQxCSMgZ2V0IGluaXRpYWwgcm1vZGUgYml0cwoJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDI6MQoJYWRkLncJCSVkNSwlZDEJCSMgYWRkIGluIExBTUJEQQoJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDM6MQoJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIHgKCWJnZS5iCQl4X3BvcwkJIyBpZiBwb3MsIGRvbid0IHNldCBiaXQgMAoJYWRkcS5sCQkmMSwlZDEJCSMgaWYgbmVnLCBzZXQgYml0IDAKeF9wb3M6CglsZWEubAkJUkJEVEJMKCVwYyksJWEyCSMgbG9hZCByYmR0YmwgYmFzZQoJbW92LmIJCSglYTIsJWQxKSwlZDMJIyBsb2FkIGQzIHdpdGggbmV3IHJtb2RlCglsc2wubAkJJjQsJWQzCQkjIHB1dCBiaXRzIGluIHByb3BlciBwb3NpdGlvbgoJZm1vdi5sCQklZDMsJWZwY3IJIyBsb2FkIGJpdHMgaW50byBmcHUKCWxzci5sCQkmNCwlZDMJCSMgcHV0IGJpdHMgaW4gcHJvcGVyIHBvc2l0aW9uCgl0c3QuYgkJJWQzCQkjIGRlY29kZSBuZXcgcm1vZGUgZm9yIHB0ZW4gdGFibGUKCWJuZS5iCQlub3Rfcm4JCSMgaWYgemVybywgaXQgaXMgUk4KCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUk4gdGFibGUgYmFzZQoJYnJhLmIJCXJtb2RlCQkjIGV4aXQgZGVjb2RlCm5vdF9ybjoKCWxzci5iCQkmMSwlZDMJCSMgZ2V0IGxzYiBpbiBjYXJyeQoJYmNjLmIJCW5vdF9ycDIJCSMgaWYgY2FycnkgY2xlYXIsIGl0IGlzIFJNCglsZWEubAkJUFRFTlJQKCVwYyksJWExCSMgbG9hZCBhMSB3aXRoIFJQIHRhYmxlIGJhc2UKCWJyYS5iCQlybW9kZQkJIyBleGl0IGRlY29kZQpub3RfcnAyOgoJbGVhLmwJCVBURU5STSglcGMpLCVhMQkjIGxvYWQgYTEgd2l0aCBSTSB0YWJsZSBiYXNlCnJtb2RlOgoJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKZV9sb29wMjoKCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQoJYmNjLmIJCWVfbmV4dDIJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCglmbXVsLngJCSglYTEsJWQzKSwlZnAxCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQplX25leHQyOgoJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5Cgl0c3QubAkJJWQwCQkjIHRlc3QgaWYgSVNDQUxFIGlzIHplcm8KCWJuZS5iCQllX2xvb3AyCQkjIGlmIG5vdCwgbG9vcAoKIyBBOC4gQ2xyIElORVg7IEZvcmNlIFJaLgojICAgICBUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KIyAgICAgUlogbW9kZSBpcyBmb3JjZWQgZm9yIHRoZSBzY2FsaW5nIG9wZXJhdGlvbiB0byBpbnN1cmUKIyAgICAgb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbgojICAgICB0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CgoJZm1vdi5sCQkmMCwlZnBzcgkjIGNsciBJTkVYCglmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgUlogcm91bmRpbmcgbW9kZQoKIyBBOS4gU2NhbGUgWCAtPiBZLgojICAgICBUaGUgbWFudGlzc2EgaXMgc2NhbGVkIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBzaWduaWZpY2FudAojICAgICBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkIGluIElORVgyLiBJZiBtdWwsCiMgICAgIENoZWNrIGQyIGZvciBleGNlc3MgMTAgZXhwb25lbnRpYWwgdmFsdWUuICBJZiBub3QgemVybywKIyAgICAgdGhlIGlzY2FsZSB2YWx1ZSB3b3VsZCBoYXZlIGNhdXNlZCB0aGUgcHdydGVuIGNhbGN1bGF0aW9uCiMgICAgIHRvIG92ZXJmbG93LiAgT25seSBhIG5lZ2F0aXZlIGlzY2FsZSBjYW4gY2F1c2UgdGhpcywgc28KIyAgICAgbXVsdGlwbHkgYnkgMTBeKGQyKSwgd2hpY2ggaXMgbm93IG9ubHkgYWxsb3dlZCB0byBiZSAyNCwKIyAgICAgd2l0aCBhIG11bHRpcGx5IGJ5IDEwXjggYW5kIDEwXjE2LCB3aGljaCBpcyBleGFjdCBzaW5jZQojICAgICAxMF4yNCBpcyBleGFjdC4gIElmIHRoZSBpbnB1dCB3YXMgZGVub3JtYWxpemVkLCB3ZSBtdXN0CiMgICAgIGNyZWF0ZSBhIGJ1c3kgc3RhY2sgZnJhbWUgd2l0aCB0aGUgbXVsIGNvbW1hbmQgYW5kIHRoZQojICAgICB0d28gb3BlcmFuZHMsIGFuZCBhbGxvdyB0aGUgZnB1IHRvIGNvbXBsZXRlIHRoZSBtdWx0aXBseS4KIwojIFJlZ2lzdGVyIHVzYWdlOgojCUlucHV0L091dHB1dAojCWQwOiBGUENSIHdpdGggUlogbW9kZS9VbmNoYW5nZWQKIwlkMjogMCBvciAyNC91bmNoYW5nZWQKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEKIwlkNjogSUxPRy9VbmNoYW5nZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKIwlhMTogcHRyIHRvIFBURU5STSBhcnJheS9VbmNoYW5nZWQKIwlhMjogeC94CiMJZnAwOiBmbG9hdChJTE9HKS9YIGFkanVzdGVkIGZvciBTQ0FMRSAoWSkKIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKIwlmcDI6IHgveAojCUZfU0NSMTp4L3gKIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCiMJTF9TQ1IxOngveAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTlfc3RyOgoJZm1vdi54CQkoJWEwKSwlZnAwCSMgbG9hZCBYIGZyb20gbWVtb3J5CglmYWJzLngJCSVmcDAJCSMgdXNlIGFicyhYKQoJdHN0LncJCSVkNQkJIyBMQU1CREEgaXMgaW4gbG93ZXIgd29yZCBvZiBkNQoJYm5lLmIJCXNjX211bAkJIyBpZiBuZWcgKExBTUJEQSA9IDEpLCBzY2FsZSBieSBtdWwKCWZkaXYueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggLyBTQ0FMRSAtPiBZIHRvIGZwMAoJYnJhLncJCUExMF9zdAkJIyBicmFuY2ggdG8gQTEwCgpzY19tdWw6Cgl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgZm9yIGRlbm9ybQoJYmVxLncJCUE5X25vcm0JCSMgaWYgbm9ybSwgY29udGludWUgd2l0aCBtdWwKCiMgZm9yIERFTk9STSwgd2UgbXVzdCBjYWxjdWxhdGU6CiMJZnAwID0gaW5wdXRfb3AgKiAxMF5JU0NBTEUgKiAxMF4yNAojIHNpbmNlIHRoZSBpbnB1dCBvcGVyYW5kIGlzIGEgREVOT1JNLCB3ZSBjYW4ndCBtdWx0aXBseSBpdCBkaXJlY3RseS4KIyBzbywgd2UgZG8gdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBleHBvbmVudHMgYW5kIG1hbnRpc3NhcyBzZXBhcmF0ZWx5LgojIGluIHRoaXMgd2F5LCB3ZSBhdm9pZCB1bmRlcmZsb3cgb24gaW50ZXJtZWRpYXRlIHN0YWdlcyBvZiB0aGUKIyBtdWx0aXBsaWNhdGlvbiBhbmQgZ3VhcmFudGVlIGEgcmVzdWx0IHdpdGhvdXQgZXhjZXB0aW9uLgoJZm1vdm0ueAkJJjB4MiwtKCVzcCkJIyBzYXZlIDEwXklTQ0FMRSB0byBzdGFjawoKCW1vdi53CQkoJXNwKSwlZDMJIyBncmFiIGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQzCSMgY2xlYXIgc2lnbgoJb3JpLncJCSYweDgwMDAsKCVhMCkJIyBtYWtlIERFTk9STSBleHAgbmVnYXRpdmUKCWFkZC53CQkoJWEwKSwlZDMJIyBhZGQgREVOT1JNIGV4cCB0byAxMF5JU0NBTEUgZXhwCglzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUwoJYWRkLncJCTM2KCVhMSksJWQzCglzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUwoJYWRkLncJCTQ4KCVhMSksJWQzCglzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUwoKCWJtaS53CQlzY19tdWxfZXJyCSMgaXMgcmVzdWx0IGlzIERFTk9STSwgcHVudCEhIQoKCWFuZGkudwkJJjB4ODAwMCwoJXNwKQkjIGtlZXAgc2lnbgoJb3IudwkJJWQzLCglc3ApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJYW5kaS53CQkmMHg3ZmZmLCglYTApCSMgY2xlYXIgc2lnbiBiaXQgb24gREVOT1JNIGFnYWluCgltb3YubAkJMHg4KCVhMCksLSglc3ApICMgcHV0IGlucHV0IG9wIG1hbnRpc3NhIG9uIHN0awoJbW92LmwJCTB4NCglYTApLC0oJXNwKQoJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSAjIGZvcmNlIGV4cCB0byB6ZXJvCglmbW92bS54CQkoJXNwKSssJjB4ODAJIyBsb2FkIG5vcm1hbGl6ZWQgREVOT1JNIGludG8gZnAwCglmbXVsLngJCSglc3ApKywlZnAwCgojCWZtdWwueAkzNiglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAojCWZtdWwueAk0OCglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeMTYKCW1vdi5sCQkzNis4KCVhMSksLSglc3ApICMgZ2V0IDEwXjggbWFudGlzc2EKCW1vdi5sCQkzNis0KCVhMSksLSglc3ApCgltb3YubAkJJjB4M2ZmZjAwMDAsLSglc3ApICMgZm9yY2UgZXhwIHRvIHplcm8KCW1vdi5sCQk0OCs4KCVhMSksLSglc3ApICMgZ2V0IDEwXjE2IG1hbnRpc3NhCgltb3YubAkJNDgrNCglYTEpLC0oJXNwKQoJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSMgZm9yY2UgZXhwIHRvIHplcm8KCWZtdWwueAkJKCVzcCkrLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAoJZm11bC54CQkoJXNwKSssJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF4xNgoJYnJhLmIJCUExMF9zdAoKc2NfbXVsX2VycjoKCWJyYS5iCQlzY19tdWxfZXJyCgpBOV9ub3JtOgoJdHN0LncJCSVkMgkJIyB0ZXN0IGZvciBzbWFsbCBleHAgY2FzZQoJYmVxLmIJCUE5X2NvbgkJIyBpZiB6ZXJvLCBjb250aW51ZSBhcyBub3JtYWwKCWZtdWwueAkJMzYoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjgKCWZtdWwueAkJNDgoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CkE5X2NvbjoKCWZtdWwueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggKiBTQ0FMRSAtPiBZIHRvIGZwMAoKIyBBMTAuIE9yIGluIElORVguCiMgICAgICBJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzIGNvbXBlbnNhdGVkCiMgICAgICBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8gdGhlIGxzYiBvZiBZLgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IEZQQ1Igd2l0aCBSWiBtb2RlL0ZQU1Igd2l0aCBJTkVYMiBpc29sYXRlZAojCWQyOiB4L3gKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEKIwlkNjogSUxPRy9VbmNoYW5nZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKIwlhMjogeC9wdHIgdG8gRlBfU0NSMShhNikKIwlmcDA6IFkvWSB3aXRoIGxzYiBhZGp1c3RlZAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogeC94CgpBMTBfc3Q6CglmbW92LmwJCSVmcHNyLCVkMAkjIGdldCBGUFNSCglmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgbW92ZSBZIHRvIG1lbW9yeQoJbGVhLmwJCUZQX1NDUjEoJWE2KSwlYTIJIyBsb2FkIGEyIHdpdGggcHRyIHRvIEZQX1NDUjEKCWJ0c3QJCSY5LCVkMAkJIyBjaGVjayBpZiBJTkVYMiBzZXQKCWJlcS5iCQlBMTFfc3QJCSMgaWYgY2xlYXIsIHNraXAgcmVzdAoJb3IubAkJJjEsOCglYTIpCSMgb3IgaW4gMSB0byBsc2Igb2YgbWFudGlzc2EKCWZtb3YueAkJRlBfU0NSMSglYTYpLCVmcDAJIyB3cml0ZSBhZGp1c3RlZCBZIGJhY2sgdG8gZnB1CgoKIyBBMTEuIFJlc3RvcmUgb3JpZ2luYWwgRlBDUjsgc2V0IHNpemUgZXh0LgojICAgICAgUGVyZm9ybSBGSU5UIG9wZXJhdGlvbiBpbiB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUuICBLZWVwCiMgICAgICB0aGUgc2l6ZSB0byBleHRlbmRlZC4gIFRoZSBzaW50ZG8gZW50cnkgcG9pbnQgaW4gdGhlIHNpbnQKIyAgICAgIHJvdXRpbmUgZXhwZWN0cyB0aGUgRlBDUiB2YWx1ZSB0byBiZSBpbiBVU0VSX0ZQQ1IgZm9yCiMgICAgICBtb2RlIGFuZCBwcmVjaXNpb24uICBUaGUgb3JpZ2luYWwgRlBDUiBpcyBzYXZlZCBpbiBMX1NDUjEuCgpBMTFfc3Q6Cgltb3YubAkJVVNFUl9GUENSKCVhNiksTF9TQ1IxKCVhNikJIyBzYXZlIGl0IGZvciBsYXRlcgoJYW5kLmwJCSYweDAwMDAwMDMwLFVTRVJfRlBDUiglYTYpCSMgc2V0IHNpemUgdG8gZXh0LAojCQkJCQk7YmxvY2sgZXhjZXB0aW9ucwoKCiMgQTEyLiBDYWxjdWxhdGUgWUlOVCA9IEZJTlQoWSkgYWNjb3JkaW5nIHRvIHVzZXIncyByb3VuZGluZyBtb2RlLgojICAgICAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQgaXMgaW4gZnAwLgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IEZQU1Igd2l0aCBBSU5FWCBjbGVhcmVkL0ZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQKIwlkMjogeC94L3NjcmF0Y2gKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEvVW5jaGFuZ2VkCiMJZDY6IElMT0cvVW5jaGFuZ2VkCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvc3JjIHB0ciBmb3Igc2ludGRvCiMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCiMJYTI6IHB0ciB0byBGUF9TQ1IxKGE2KS9VbmNoYW5nZWQKIwlhNjogdGVtcCBwb2ludGVyIHRvIEZQX1NDUjEoYTYpIC0gb3JpZyB2YWx1ZSBzYXZlZCBhbmQgcmVzdG9yZWQKIwlmcDA6IFkvWUlOVAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogeC94CiMJRl9TQ1IxOngveAojCUZfU0NSMjpZIGFkanVzdGVkIGZvciBpbmV4L1kgd2l0aCBvcmlnaW5hbCBleHBvbmVudAojCUxfU0NSMTp4L29yaWdpbmFsIFVTRVJfRlBDUgojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTEyX3N0OgoJbW92bS5sCSYweGMwYzAsLSglc3ApCSMgc2F2ZSByZWdzIHVzZWQgYnkgc2ludGQwCSB7JWQwLSVkMS8lYTAtJWExfQoJbW92LmwJTF9TQ1IxKCVhNiksLSglc3ApCgltb3YubAlMX1NDUjIoJWE2KSwtKCVzcCkKCglsZWEubAkJRlBfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBGUF9TQ1IxKGE2KQoJZm1vdi54CQklZnAwLCglYTApCSMgbW92ZSBZIHRvIG1lbW9yeSBhdCBGUF9TQ1IxKGE2KQoJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIG9wZXJhbmQKCWJnZS5iCQlkb19maW50MTIJCSMgaWYgcG9zLCB1c2UgWQoJb3IubAkJJjB4ODAwMDAwMDAsKCVhMCkJIyBpZiBuZWcsIHVzZSAtWQpkb19maW50MTI6Cgltb3YubAlVU0VSX0ZQU1IoJWE2KSwtKCVzcCkKIwlic3IJc2ludGRvCQkjIHNpbnQgcm91dGluZSByZXR1cm5zIGludCBpbiBmcDAKCglmbW92LmwJVVNFUl9GUENSKCVhNiksJWZwY3IKCWZtb3YubAkmMHgwLCVmcHNyCQkJIyBjbGVhciB0aGUgQUVYQyBiaXRzISEhCiMjCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDAJIyBleHQgcHJlYy9rZWVwIHJuZCBtb2RlCiMjCWFuZGkubAkJJjB4MDAwMDAwMzAsJWQwCiMjCWZtb3YubAkJJWQwLCVmcGNyCglmaW50LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgZG8gZmludCgpCglmbW92LmwJJWZwc3IsJWQwCglvci53CSVkMCxGUFNSX0VYQ0VQVCglYTYpCiMjCWZtb3YubAkJJjB4MCwlZnBjcgojIwlmbW92LmwJCSVmcHNyLCVkMAkJIyBkb24ndCBrZWVwIGNjb2RlcwojIwlvci53CQklZDAsRlBTUl9FWENFUFQoJWE2KQoKCW1vdi5iCSglc3ApLFVTRVJfRlBTUiglYTYpCglhZGQubAkmNCwlc3AKCgltb3YubAkoJXNwKSssTF9TQ1IyKCVhNikKCW1vdi5sCSglc3ApKyxMX1NDUjEoJWE2KQoJbW92bS5sCSglc3ApKywmMHgzMDMJIyByZXN0b3JlIHJlZ3MgdXNlZCBieSBzaW50CSB7JWQwLSVkMS8lYTAtJWExfQoKCW1vdi5sCUxfU0NSMiglYTYpLEZQX1NDUjEoJWE2KQkjIHJlc3RvcmUgb3JpZ2luYWwgZXhwb25lbnQKCW1vdi5sCUxfU0NSMSglYTYpLFVTRVJfRlBDUiglYTYpCSMgcmVzdG9yZSB1c2VyJ3MgRlBDUgoKIyBBMTMuIENoZWNrIGZvciBMRU4gZGlnaXRzLgojICAgICAgSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywKIyAgICAgIG9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KIyAgICAgIEE2LiAgVGhpcyB0ZXN0IG9jY3VycyBvbmx5IG9uIHRoZSBmaXJzdCBwYXNzLiAgSWYgdGhlCiMgICAgICByZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKIyAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90CiMgICAgICBiZSBpbmV4YWN0LCBzaW5jZSBhbGwgcG93ZXJzIG9mIHRlbiB1cHRvIDEwXjI3IGFyZSBleGFjdAojICAgICAgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBzbyB0aGUgdXNlIG9mIGEgcHJldmlvdXMgcG93ZXItb2YtdGVuCiMgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KIwojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IEZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQvc2NyYXRjaCBmaW5hbCA9IDAKIwlkMjogeC94CiMJZDM6IHgvc2NyYXRjaCBmaW5hbCA9IHgKIwlkNDogTEVOL0xFTiBhZGp1c3RlZAojCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgojCWQ2OiBJTE9HL0lMT0cgYWRqdXN0ZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgojCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAojCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCiMJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogeC8xMF5MRU4KIwlGX1NDUjE6eC94CiMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9VbmNoYW5nZWQKIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTEzX3N0OgoJc3dhcAkJJWQ1CQkjIHB1dCBJQ1RSIGluIGxvd2VyIHdvcmQgb2YgZDUKCXRzdC53CQklZDUJCSMgY2hlY2sgaWYgSUNUUiA9IDAKCWJuZQkJbm90X3pyCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBzZWNvbmQgdGVzdAojCiMgQ29tcHV0ZSAxMF4oTEVOLTEpCiMKCWZtb3YucwkJRk9ORSglcGMpLCVmcDIJIyBpbml0IGZwMiB0byAxLjAKCW1vdi5sCQklZDQsJWQwCQkjIHB1dCBMRU4gaW4gZDAKCXN1YnEubAkJJjEsJWQwCQkjIGQwID0gTEVOIC0xCgljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleApsX2xvb3A6Cglsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKCWJjYy5iCQlsX25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCglmbXVsLngJCSglYTEsJWQzKSwlZnAyCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQpsX25leHQ6CglhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKCXRzdC5sCQklZDAJCSMgdGVzdCBpZiBMRU4gaXMgemVybwoJYm5lLmIJCWxfbG9vcAkJIyBpZiBub3QsIGxvb3AKIwojIDEwXkxFTi0xIGlzIGNvbXB1dGVkIGZvciB0aGlzIHRlc3QgYW5kIEExNC4gIElmIHRoZSBpbnB1dCB3YXMKIyBkZW5vcm1hbGl6ZWQsIGNoZWNrIG9ubHkgdGhlIGNhc2UgaW4gd2hpY2ggWUlOVCA+IDEwXkxFTi4KIwoJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGlmIGlucHV0IHdhcyBub3JtCgliZXEuYgkJQTEzX2NvbgkJIyBpZiBub3JtLCBjb250aW51ZSB3aXRoIGNoZWNraW5nCglmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAoJYnJhCQl0ZXN0XzIKIwojIENvbXBhcmUgYWJzKFlJTlQpIHRvIDEwXihMRU4tMSkgYW5kIDEwXkxFTgojCkExM19jb246CglmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAoJZmNtcC54CQklZnAwLCVmcDIJIyBjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXihMRU4tMSkKCWZiZ2UudwkJdGVzdF8yCQkjIGlmIGdyZWF0ZXIsIGRvIG5leHQgdGVzdAoJc3VicS5sCQkmMSwlZDYJCSMgc3VidHJhY3QgMSBmcm9tIElMT0cKCW1vdi53CQkmMSwlZDUJCSMgc2V0IElDVFIKCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBybW9kZSB0byBSTQoJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCglicmEudwkJQTZfc3RyCQkjIHJldHVybiB0byBBNiBhbmQgcmVjb21wdXRlIFlJTlQKdGVzdF8yOgoJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCglmY21wLngJCSVmcDAsJWZwMgkjIGNvbXBhcmUgYWJzKFlJTlQpIHdpdGggMTBeTEVOCglmYmx0LncJCUExNF9zdAkJIyBpZiBsZXNzLCBhbGwgaXMgb2ssIGdvIHRvIEExNAoJZmJndC53CQlmaXhfZXgJCSMgaWYgZ3JlYXRlciwgZml4IGFuZCByZWRvCglmZGl2LnMJCUZURU4oJXBjKSwlZnAwCSMgaWYgZXF1YWwsIGRpdmlkZSBieSAxMAoJYWRkcS5sCQkmMSwlZDYJCSMgYW5kIGluYyBJTE9HCglicmEuYgkJQTE0X3N0CQkjIGFuZCBjb250aW51ZSBlbHNld2hlcmUKZml4X2V4OgoJYWRkcS5sCQkmMSwlZDYJCSMgaW5jcmVtZW50IElMT0cgYnkgMQoJbW92LncJCSYxLCVkNQkJIyBzZXQgSUNUUgoJZm1vdi5sCQkmcm1fbW9kZSoweDEwLCVmcGNyCSMgc2V0IHJtb2RlIHRvIFJNCglicmEudwkJQTZfc3RyCQkjIHJldHVybiB0byBBNiBhbmQgcmVjb21wdXRlIFlJTlQKIwojIFNpbmNlIElDVFIgPD4gMCwgd2UgaGF2ZSBhbHJlYWR5IGJlZW4gdGhyb3VnaCBvbmUgYWRqdXN0bWVudCwKIyBhbmQgc2hvdWxkbid0IGhhdmUgYW5vdGhlcjsgdGhpcyBpcyB0byBjaGVjayBpZiBhYnMoWUlOVCkgPSAxMF5MRU4KIyAxMF5MRU4gaXMgYWdhaW4gY29tcHV0ZWQgdXNpbmcgd2hhdGV2ZXIgdGFibGUgaXMgaW4gYTEgc2luY2UgdGhlCiMgdmFsdWUgY2FsY3VsYXRlZCBjYW5ub3QgYmUgaW5leGFjdC4KIwpub3RfenI6CglmbW92LnMJCUZPTkUoJXBjKSwlZnAyCSMgaW5pdCBmcDIgdG8gMS4wCgltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwCgljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleAp6X2xvb3A6Cglsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKCWJjYy5iCQl6X25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCglmbXVsLngJCSglYTEsJWQzKSwlZnAyCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQp6X25leHQ6CglhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKCXRzdC5sCQklZDAJCSMgdGVzdCBpZiBMRU4gaXMgemVybwoJYm5lLmIJCXpfbG9vcAkJIyBpZiBub3QsIGxvb3AKCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzKFlJTlQpCglmY21wLngJCSVmcDAsJWZwMgkjIGNoZWNrIGlmIGFicyhZSU5UKSA9IDEwXkxFTgoJZmJuZXEudwkJQTE0X3N0CQkjIGlmIG5vdCwgc2tpcCB0aGlzCglmZGl2LnMJCUZURU4oJXBjKSwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMAoJYWRkcS5sCQkmMSwlZDYJCSMgYW5kIGluYyBJTE9HIGJ5IDEKCWFkZHEubAkJJjEsJWQ0CQkjIGFuZCBpbmMgTEVOCglmbXVsLnMJCUZURU4oJXBjKSwlZnAyCSMgaWYgTEVOKyssIHRoZSBnZXQgMTBeXkxFTgoKIyBBMTQuIENvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJjZC4KIyAgICAgIFRoZSBiaW5zdHIgcm91dGluZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIExFTiBkaWdpdAojICAgICAgbWFudGlzc2EgdG8gYmNkIGluIG1lbW9yeS4gIFRoZSBpbnB1dCB0byBiaW5zdHIgaXMKIyAgICAgIHRvIGJlIGEgZnJhY3Rpb247IGkuZS4gKG1hbnRpc3NhKS8xMF5MRU4gYW5kIGFkanVzdGVkCiMgICAgICBzdWNoIHRoYXQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgYml0IDYzLgojICAgICAgVGhlIGJjZCBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbgojICAgICAgdGhlIGZpbmFsIHN0cmluZyBhcmVhIGluIG1lbW9yeS4KIwojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IHgvTEVOIGNhbGwgdG8gYmluc3RyIC0gZmluYWwgaXMgMAojCWQxOiB4LzAKIwlkMjogeC9tcyAzMi1iaXRzIG9mIG1hbnQgb2YgYWJzKFlJTlQpCiMJZDM6IHgvbHMgMzItYml0cyBvZiBtYW50IG9mIGFicyhZSU5UKQojCWQ0OiBMRU4vVW5jaGFuZ2VkCiMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCiMJZDY6IElMT0cKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgojCSAgICAvcHRyIHRvIGZpcnN0IG1hbnRpc3NhIGJ5dGUgaW4gcmVzdWx0IHN0cmluZwojCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAojCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCiMJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogMTBeTEVOL1VuY2hhbmdlZAojCUZfU0NSMTp4L1dvcmsgYXJlYSBmb3IgZmluYWwgcmVzdWx0CiMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9VbmNoYW5nZWQKIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTE0X3N0OgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgZm9yY2UgcnogZm9yIGNvbnZlcnNpb24KCWZkaXYueAkJJWZwMiwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMF5MRU4KCWxlYS5sCQlGUF9TQ1IwKCVhNiksJWEwCglmbW92LngJCSVmcDAsKCVhMCkJIyBtb3ZlIGFicyhZSU5UKS8xMF5MRU4gdG8gbWVtb3J5Cgltb3YubAkJNCglYTApLCVkMgkjIG1vdmUgMm5kIHdvcmQgb2YgRlBfUkVTIHRvIGQyCgltb3YubAkJOCglYTApLCVkMwkjIG1vdmUgM3JkIHdvcmQgb2YgRlBfUkVTIHRvIGQzCgljbHIubAkJNCglYTApCQkjIHplcm8gd29yZCAyIG9mIEZQX1JFUwoJY2xyLmwJCTgoJWEwKQkJIyB6ZXJvIHdvcmQgMyBvZiBGUF9SRVMKCW1vdi5sCQkoJWEwKSwlZDAJIyBtb3ZlIGV4cG9uZW50IHRvIGQwCglzd2FwCQklZDAJCSMgcHV0IGV4cG9uZW50IGluIGxvd2VyIHdvcmQKCWJlcS5iCQlub19zZnQJCSMgaWYgemVybywgZG9uJ3Qgc2hpZnQKCXN1Yi5sCQkmMHgzZmZkLCVkMAkjIHN1YiBiaWFzIGxlc3MgMiB0byBtYWtlIGZyYWN0Cgl0c3QubAkJJWQwCQkjIGNoZWNrIGlmID4gMQoJYmd0LmIJCW5vX3NmdAkJIyBpZiBzbywgZG9uJ3Qgc2hpZnQKCW5lZy5sCQklZDAJCSMgbWFrZSBleHAgcG9zaXRpdmUKbV9sb29wOgoJbHNyLmwJCSYxLCVkMgkJIyBzaGlmdCBkMjpkMyByaWdodCwgYWRkIDBzCglyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcwoJZGJmLncJCSVkMCxtX2xvb3AJIyBnaXZlbiBpbiBkMApub19zZnQ6Cgl0c3QubAkJJWQyCQkjIGNoZWNrIGZvciBtYW50aXNzYSBvZiB6ZXJvCglibmUuYgkJbm9fenIJCSMgaWYgbm90LCBnbyBvbgoJdHN0LmwJCSVkMwkJIyBjb250aW51ZSB6ZXJvIGNoZWNrCgliZXEuYgkJemVyX20JCSMgaWYgemVybywgZ28gZGlyZWN0bHkgdG8gYmluc3RyCm5vX3pyOgoJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAoJYWRkLmwJCSYweDAwMDAwMDgwLCVkMwkjIGluYyBhdCBiaXQgNwoJYWRkeC5sCQklZDEsJWQyCQkjIGNvbnRpbnVlIGluYwoJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCnplcl9tOgoJbW92LmwJCSVkNCwlZDAJCSMgcHV0IExFTiBpbiBkMCBmb3IgYmluc3RyIGNhbGwKCWFkZHEubAkJJjMsJWEwCQkjIGEwIHBvaW50cyB0byBNMTYgYnl0ZSBpbiByZXN1bHQKCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgbWFudAoKCiMgQTE1LiBDb252ZXJ0IHRoZSBleHBvbmVudCB0byBiY2QuCiMgICAgICBBcyBpbiBBMTQgYWJvdmUsIHRoZSBleHAgaXMgY29udmVydGVkIHRvIGJjZCBhbmQgdGhlCiMgICAgICBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgojCiMgICAgICBEaWdpdHMgYXJlIHN0b3JlZCBpbiBMX1NDUjEoYTYpIG9uIHJldHVybiBmcm9tIEJJTkRFQyBhczoKIwojCSAzMiAgICAgICAgICAgICAgIDE2IDE1ICAgICAgICAgICAgICAgIDAKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgIDAgfCBlMyB8IGUyIHwgZTEgfCBlNCB8ICBYIHwgIFggfCAgWCB8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIEFuZCBhcmUgbW92ZWQgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzIGluIEZQX1NDUjAuICBJZiBkaWdpdCBlNAojIGlzIG5vbi16ZXJvLCBPUEVSUiBpcyBzaWduYWxlZC4gIEluIGFsbCBjYXNlcywgYWxsIDQgZGlnaXRzIGFyZQojIHdyaXR0ZW4gYXMgc3BlY2lmaWVkIGluIHRoZSA4ODEvODgyIG1hbnVhbCBmb3IgcGFja2VkIGRlY2ltYWwuCiMKIyBSZWdpc3RlciB1c2FnZToKIwlJbnB1dC9PdXRwdXQKIwlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCiMJZDE6IHgvc2NyYXRjaCAoMCk7c2hpZnQgY291bnQgZm9yIGZpbmFsIGV4cG9uZW50IHBhY2tpbmcKIwlkMjogeC9tcyAzMi1iaXRzIG9mIGV4cCBmcmFjdGlvbi9zY3JhdGNoCiMJZDM6IHgvbHMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24KIwlkNDogTEVOL1VuY2hhbmdlZAojCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgojCWQ2OiBJTE9HCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgdG8gcmVzdWx0IHN0cmluZy9wdHIgdG8gTF9TQ1IxKGE2KQojCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAojCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCiMJZnAwOiBhYnMoWUlOVCkgYWRqdXN0ZWQvZmxvYXQoSUxPRykKIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKIwlGX1NDUjE6V29yayBhcmVhIGZvciBmaW5hbCByZXN1bHQvQkNEIHJlc3VsdAojCUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvSUxPRy8xMF40CiMJTF9TQ1IxOm9yaWdpbmFsIFVTRVJfRlBDUi9FeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCiMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCgpBMTVfc3Q6Cgl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgZm9yIGRlbm9ybQoJYmVxLmIJCW5vdF9kZW5vcm0KCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybwoJZmJlcS53CQlkZW5femVybwkjIGlmIHplcm8sIHVzZSBrLWZhY3RvciBvciA0OTMzCglmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRwoJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRwoJYnJhLmIJCWNvbnZydApkZW5femVybzoKCXRzdC5sCQklZDcJCSMgY2hlY2sgc2lnbiBvZiB0aGUgay1mYWN0b3IKCWJsdC5iCQl1c2VfaWxvZwkjIGlmIG5lZ2F0aXZlLCB1c2UgSUxPRwoJZm1vdi5zCQlGNDkzMyglcGMpLCVmcDAJIyBmb3JjZSBleHBvbmVudCB0byA0OTMzCglicmEuYgkJY29udnJ0CQkjIGRvIGl0CnVzZV9pbG9nOgoJZm1vdi5sCQklZDYsJWZwMAkjIGZsb2F0IElMT0cKCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKCWJyYS5iCQljb252cnQKbm90X2Rlbm9ybToKCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybwoJZmJuZXEudwkJbm90X3plcm8JIyBpZiB6ZXJvLCBmb3JjZSBleHBvbmVudAoJZm1vdi5zCQlGT05FKCVwYyksJWZwMAkjIGZvcmNlIGV4cG9uZW50IHRvIDEKCWJyYS5iCQljb252cnQJCSMgZG8gaXQKbm90X3plcm86CglmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRwoJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRwpjb252cnQ6CglmZGl2LngJCTI0KCVhMSksJWZwMAkjIGNvbXB1dGUgSUxPRy8xMF40CglmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgc3RvcmUgZnAwIGluIG1lbW9yeQoJbW92LmwJCTQoJWEyKSwlZDIJIyBtb3ZlIHdvcmQgMiB0byBkMgoJbW92LmwJCTgoJWEyKSwlZDMJIyBtb3ZlIHdvcmQgMyB0byBkMwoJbW92LncJCSglYTIpLCVkMAkjIG1vdmUgZXhwIHRvIGQwCgliZXEuYgkJeF9sb29wX2ZpbgkjIGlmIHplcm8sIHNraXAgdGhlIHNoaWZ0CglzdWIudwkJJjB4M2ZmZCwlZDAJIyBzdWJ0cmFjdCBvZmYgYmlhcwoJbmVnLncJCSVkMAkJIyBtYWtlIGV4cCBwb3NpdGl2ZQp4X2xvb3A6Cglsc3IubAkJJjEsJWQyCQkjIHNoaWZ0IGQyOmQzIHJpZ2h0Cglyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcwoJZGJmLncJCSVkMCx4X2xvb3AJIyBnaXZlbiBpbiBkMAp4X2xvb3BfZmluOgoJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAoJYWRkLmwJCSYweDAwMDAwMDgwLCVkMwkjIGluYyBhdCBiaXQgNgoJYWRkeC5sCQklZDEsJWQyCQkjIGNvbnRpbnVlIGluYwoJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCgltb3YubAkJJjQsJWQwCQkjIHB1dCA0IGluIGQwIGZvciBiaW5zdHIgY2FsbAoJbGVhLmwJCUxfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBMX1NDUjEgZm9yIGV4cCBkaWdpdHMKCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgZXhwCgltb3YubAkJTF9TQ1IxKCVhNiksJWQwCSMgbG9hZCBMX1NDUjEgbHdvcmQgdG8gZDAKCW1vdi5sCQkmMTIsJWQxCQkjIHVzZSBkMSBmb3Igc2hpZnQgY291bnQKCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCgliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmNDomMTJ9CSMgcHV0IGUzOmUyOmUxIGluIEZQX1NDUjAKCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCgliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmMTY6JjR9CSMgcHV0IGU0IGluIEZQX1NDUjAKCXRzdC5iCQklZDAJCSMgY2hlY2sgaWYgZTQgaXMgemVybwoJYmVxLmIJCUExNl9zdAkJIyBpZiB6ZXJvLCBza2lwIHJlc3QKCW9yLmwJCSZvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCSMgc2V0IE9QRVJSICYgQUlPUCBpbiBVU0VSX0ZQU1IKCgojIEExNi4gV3JpdGUgc2lnbiBiaXRzIHRvIGZpbmFsIHN0cmluZy4KIwkgICBTaWdtYSBpcyBiaXQgMzEgb2YgaW5pdGlhbCB2YWx1ZTsgUkhPIGlzIGJpdCAzMSBvZiBkNiAoSUxPRykuCiMKIyBSZWdpc3RlciB1c2FnZToKIwlJbnB1dC9PdXRwdXQKIwlkMDogeC9zY3JhdGNoIC0gZmluYWwgaXMgeAojCWQyOiB4L3gKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKIwlkNjogSUxPRy9JTE9HIGFkanVzdGVkCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgdG8gTF9TQ1IxKGE2KS9VbmNoYW5nZWQKIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAojCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCiMJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCiMJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCiMJRl9TQ1IxOkJDRCByZXN1bHQgd2l0aCBjb3JyZWN0IHNpZ25zCiMJRl9TQ1IyOklMT0cvMTBeNAojCUxfU0NSMTpFeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCiMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCgpBMTZfc3Q6CgljbHIubAkJJWQwCQkjIGNsciBkMCBmb3IgY29sbGVjdGlvbiBvZiBzaWducwoJYW5kLmIJCSYweDBmLEZQX1NDUjAoJWE2KQkjIGNsZWFyIGZpcnN0IG5pYmJsZSBvZiBGUF9TQ1IwCgl0c3QubAkJTF9TQ1IyKCVhNikJIyBjaGVjayBzaWduIG9mIG9yaWdpbmFsIG1hbnRpc3NhCgliZ2UuYgkJbWFudF9wCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IFNNCgltb3YubAkJJjIsJWQwCQkjIG1vdmUgMiBpbiB0byBkMCBmb3IgU00KbWFudF9wOgoJdHN0LmwJCSVkNgkJIyBjaGVjayBzaWduIG9mIElMT0cKCWJnZS5iCQl3cl9zZ24JCSMgaWYgcG9zLCBkb24ndCBzZXQgU0UKCWFkZHEubAkJJjEsJWQwCQkjIHNldCBiaXQgMCBpbiBkMCBmb3IgU0UKd3Jfc2duOgoJYmZpbnMJCSVkMCxGUF9TQ1IwKCVhNil7JjA6JjJ9CSMgaW5zZXJ0IFNNIGFuZCBTRSBpbnRvIEZQX1NDUjAKCiMgQ2xlYW4gdXAgYW5kIHJlc3RvcmUgYWxsIHJlZ2lzdGVycyB1c2VkLgoKCWZtb3YubAkJJjAsJWZwc3IJIyBjbGVhciBwb3NzaWJsZSBpbmV4Mi9haW5leCBiaXRzCglmbW92bS54CQkoJXNwKSssJjB4ZTAJIyAgeyVmcDAtJWZwMn0KCW1vdm0ubAkJKCVzcCkrLCYweDRmYwkjICB7JWQyLSVkNy8lYTJ9CglydHMKCglnbG9iYWwJCVBURU5STgpQVEVOUk46Cglsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQoJbG9uZwkJMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDIKCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0Cglsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAoJbG9uZwkJMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAJIyAxMCBeIDE2Cglsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAoJbG9uZwkJMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDRTAJIyAxMCBeIDEyOAoJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgoJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgoJbG9uZwkJMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcJIyAxMCBeIDEwMjQKCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4Cglsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgoKCWdsb2JhbAkJUFRFTlJQClBURU5SUDoKCWxvbmcJCTB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAxCglsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgoJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKCWxvbmcJCTB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwCSMgMTAgXiA4Cglsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgoJbG9uZwkJMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDYJIyAxMCBeIDY0Cglsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4Cglsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2Cglsb25nCQkweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNwkjIDEwIF4gNTEyCglsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOAkjIDEwIF4gMTAyNAoJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKCWxvbmcJCTB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCCSMgMTAgXiA0MDk2CgoJZ2xvYmFsCQlQVEVOUk0KUFRFTlJNOgoJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCglsb25nCQkweDQwMEMwMDAwLDB4OUM0MDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gNAoJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgoJbG9uZwkJMHg0MDY5MDAwMCwweDlEQzVBREE4LDB4MkI3MEI1OUQJIyAxMCBeIDMyCglsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENQkjIDEwIF4gNjQKCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0RGCSMgMTAgXiAxMjgKCWxvbmcJCTB4NDM1MTAwMDAsMHhBQTdFRUJGQiwweDlERjlERThECSMgMTAgXiAyNTYKCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM2CSMgMTAgXiA1MTIKCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0Cglsb25nCQkweDVBOTIwMDAwLDB4OUU4QjNCNUQsMHhDNTNENURFNAkjIDEwIF4gMjA0OAoJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUEJIyAxMCBeIDQwOTYKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBiaW5zdHIoKTogQ29udmVydHMgYSA2NC1iaXQgYmluYXJ5IGludGVnZXIgdG8gYmNkLgkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWQyOmQzID0gNjQtYml0IGJpbmFyeSBpbnRlZ2VyCQkJCQkjCiMJZDAgICAgPSBkZXNpcmVkIGxlbmd0aCAoTEVOKQkJCQkJIwojCWEwICAgID0gcG9pbnRlciB0byBzdGFydCBpbiBtZW1vcnkgZm9yIGJjZCBjaGFyYWN0ZXJzCQkjCiMJCShUaGlzIHBvaW50ZXIgbXVzdCBwb2ludCB0byBieXRlIDQgb2YgdGhlIGZpcnN0CQkjCiMJCSBsd29yZCBvZiB0aGUgcGFja2VkIGRlY2ltYWwgbWVtb3J5IHN0cmluZy4pCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlhMCA9IHBvaW50ZXIgdG8gTEVOIGJjZCBkaWdpdHMgcmVwcmVzZW50aW5nIHRoZSA2NC1iaXQgaW50ZWdlci4JIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVGhlIDY0LWJpdCBiaW5hcnkgaXMgYXNzdW1lZCB0byBoYXZlIGEgZGVjaW1hbCBwb2ludCBiZWZvcmUJIwojCWJpdCA2My4gIFRoZSBmcmFjdGlvbiBpcyBtdWx0aXBsaWVkIGJ5IDEwIHVzaW5nIGEgbXVsIGJ5IDIJIwojCXNoaWZ0IGFuZCBhIG11bCBieSA4IHNoaWZ0LiAgVGhlIGJpdHMgc2hpZnRlZCBvdXQgb2YgdGhlCSMKIwltc2IgZm9ybSBhIGRlY2ltYWwgZGlnaXQuICBUaGlzIHByb2Nlc3MgaXMgaXRlcmF0ZWQgdW50aWwJIwojCUxFTiBkaWdpdHMgYXJlIGZvcm1lZC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQTEuIEluaXQgZDcgdG8gMS4gIEQ3IGlzIHRoZSBieXRlIGRpZ2l0IGNvdW50ZXIsIGFuZCBpZiAxLCB0aGUJIwojICAgICBkaWdpdCBmb3JtZWQgd2lsbCBiZSBhc3N1bWVkIHRoZSBsZWFzdCBzaWduaWZpY2FudC4gIFRoaXMgaXMJIwojICAgICB0byBmb3JjZSB0aGUgZmlyc3QgYnl0ZSBmb3JtZWQgdG8gaGF2ZSBhIDAgaW4gdGhlIHVwcGVyIDQgYml0cy4JIwojCQkJCQkJCQkJIwojIEEyLiBCZWdpbm5pbmcgb2YgdGhlIGxvb3A6CQkJCQkJIwojICAgICBDb3B5IHRoZSBmcmFjdGlvbiBpbiBkMjpkMyB0byBkNDpkNS4JCQkJIwojCQkJCQkJCQkJIwojIEEzLiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDI6ZDMgYnkgOCB1c2luZyBiaXQtZmllbGQJCSMKIyAgICAgZXh0cmFjdHMgYW5kIHNoaWZ0cy4gIFRoZSB0aHJlZSBtc2JzIGZyb20gZDIgd2lsbCBnbyBpbnRvIGQxLgkjCiMJCQkJCQkJCQkjCiMgQTQuIE11bHRpcGx5IHRoZSBmcmFjdGlvbiBpbiBkNDpkNSBieSAyIHVzaW5nIHNoaWZ0cy4gIFRoZSBtc2IJIwojICAgICB3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgY2FycnkuCQkJCQkjCiMJCQkJCQkJCQkjCiMgQTUuIEFkZCB1c2luZyB0aGUgY2FycnkgdGhlIDY0LWJpdCBxdWFudGl0aWVzIGluIGQyOmQzIGFuZCBkNDpkNQkjCiMgICAgIGludG8gZDI6ZDMuICBEMSB3aWxsIGNvbnRhaW4gdGhlIGJjZCBkaWdpdCBmb3JtZWQuCQkjCiMJCQkJCQkJCQkjCiMgQTYuIFRlc3QgZDcuICBJZiB6ZXJvLCB0aGUgZGlnaXQgZm9ybWVkIGlzIHRoZSBtcyBkaWdpdC4gIElmIG5vbi0JIwojICAgICB6ZXJvLCBpdCBpcyB0aGUgbHMgZGlnaXQuICBQdXQgdGhlIGRpZ2l0IGluIGl0cyBwbGFjZSBpbiB0aGUJIwojICAgICB1cHBlciB3b3JkIG9mIGQwLiAgSWYgaXQgaXMgdGhlIGxzIGRpZ2l0LCB3cml0ZSB0aGUgd29yZAkJIwojICAgICBmcm9tIGQwIHRvIG1lbW9yeS4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQTcuIERlY3JlbWVudCBkNiAoTEVOIGNvdW50ZXIpIGFuZCByZXBlYXQgdGhlIGxvb3AgdW50aWwgemVyby4JIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCUltcGxlbWVudGF0aW9uIE5vdGVzOgojCiMJVGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBmb2xsb3dzOgojCiMJCWQwOiBMRU4gY291bnRlcgojCQlkMTogdGVtcCB1c2VkIHRvIGZvcm0gdGhlIGRpZ2l0CiMJCWQyOiB1cHBlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgOAojCQlkMzogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKIwkJZDQ6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCiMJCWQ1OiBsb3dlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgMgojCQlkNjogdGVtcCBmb3IgYml0LWZpZWxkIGV4dHJhY3RzCiMJCWQ3OiBieXRlIGRpZ2l0IGZvcm1hdGlvbiB3b3JkO2RpZ2l0IGNvdW50IHswLDF9CiMJCWEwOiBwb2ludGVyIGludG8gbWVtb3J5IGZvciBwYWNrZWQgYmNkIHN0cmluZyBmb3JtYXRpb24KIwoKCWdsb2JhbAkJYmluc3RyCmJpbnN0cjoKCW1vdm0ubAkJJjB4ZmYwMCwtKCVzcCkJIyAgeyVkMC0lZDd9CgojCiMgQTE6IEluaXQgZDcKIwoJbW92LmwJCSYxLCVkNwkJIyBpbml0IGQ3IGZvciBzZWNvbmQgZGlnaXQKCXN1YnEubAkJJjEsJWQwCQkjIGZvciBkYmYgZDAgd291bGQgaGF2ZSBMRU4rMSBwYXNzZXMKIwojIEEyLiBDb3B5IGQyOmQzIHRvIGQ0OmQ1LiAgU3RhcnQgbG9vcC4KIwpsb29wOgoJbW92LmwJCSVkMiwlZDQJCSMgY29weSB0aGUgZnJhY3Rpb24gYmVmb3JlIG11bHMKCW1vdi5sCQklZDMsJWQ1CQkjIHRvIGQ0OmQ1CiMKIyBBMy4gTXVsdGlwbHkgZDI6ZDMgYnkgODsgZXh0cmFjdCBtc2JzIGludG8gZDEuCiMKCWJmZXh0dQkJJWQyeyYwOiYzfSwlZDEJIyBjb3B5IDMgbXNicyBvZiBkMiBpbnRvIGQxCglhc2wubAkJJjMsJWQyCQkjIHNoaWZ0IGQyIGxlZnQgYnkgMyBwbGFjZXMKCWJmZXh0dQkJJWQzeyYwOiYzfSwlZDYJIyBjb3B5IDMgbXNicyBvZiBkMyBpbnRvIGQ2Cglhc2wubAkJJjMsJWQzCQkjIHNoaWZ0IGQzIGxlZnQgYnkgMyBwbGFjZXMKCW9yLmwJCSVkNiwlZDIJCSMgb3IgaW4gbXNicyBmcm9tIGQzIGludG8gZDIKIwojIEE0LiBNdWx0aXBseSBkNDpkNSBieSAyOyBhZGQgY2Fycnkgb3V0IHRvIGQxLgojCglhc2wubAkJJjEsJWQ1CQkjIG11bCBkNSBieSAyCglyb3hsLmwJCSYxLCVkNAkJIyBtdWwgZDQgYnkgMgoJc3dhcAkJJWQ2CQkjIHB1dCAwIGluIGQ2IGxvd2VyIHdvcmQKCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gbXVsIGJ5IDIKIwojIEE1LiBBZGQgbXVsIGJ5IDggdG8gbXVsIGJ5IDIuICBEMSBjb250YWlucyB0aGUgZGlnaXQgZm9ybWVkLgojCglhZGQubAkJJWQ1LCVkMwkJIyBhZGQgbG93ZXIgMzIgYml0cwoJbm9wCQkJCSMgRVJSQVRBIEZJWCAjMTMgKFJldi4gMS4yIDYvNi85MCkKCWFkZHgubAkJJWQ0LCVkMgkJIyBhZGQgd2l0aCBleHRlbmQgdXBwZXIgMzIgYml0cwoJbm9wCQkJCSMgRVJSQVRBIEZJWCAjMTMgKFJldi4gMS4yIDYvNi85MCkKCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gYWRkIHRvIGQxCglzd2FwCQklZDYJCSMgd2l0aCBkNiA9IDA7IHB1dCAwIGluIHVwcGVyIHdvcmQKIwojIEE2LiBUZXN0IGQ3IGFuZCBicmFuY2guCiMKCXRzdC53CQklZDcJCSMgaWYgemVybywgc3RvcmUgZGlnaXQgJiB0byBsb29wCgliZXEuYgkJZmlyc3RfZAkJIyBpZiBub24temVybywgZm9ybSBieXRlICYgd3JpdGUKc2VjX2Q6Cglzd2FwCQklZDcJCSMgYnJpbmcgZmlyc3QgZGlnaXQgdG8gd29yZCBkN2IKCWFzbC53CQkmNCwlZDcJCSMgZmlyc3QgZGlnaXQgaW4gdXBwZXIgNCBiaXRzIGQ3YgoJYWRkLncJCSVkMSwlZDcJCSMgYWRkIGluIGxzIGRpZ2l0IHRvIGQ3YgoJbW92LmIJCSVkNywoJWEwKSsJIyBzdG9yZSBkN2IgYnl0ZSBpbiBtZW1vcnkKCXN3YXAJCSVkNwkJIyBwdXQgTEVOIGNvdW50ZXIgaW4gd29yZCBkN2EKCWNsci53CQklZDcJCSMgc2V0IGQ3YSB0byBzaWduYWwgbm8gZGlnaXRzIGRvbmUKCWRiZi53CQklZDAsbG9vcAkjIGRvIGxvb3Agc29tZSBtb3JlIQoJYnJhLmIJCWVuZF9ic3RyCSMgZmluaXNoZWQsIHNvIGV4aXQKZmlyc3RfZDoKCXN3YXAJCSVkNwkJIyBwdXQgZGlnaXQgd29yZCBpbiBkN2IKCW1vdi53CQklZDEsJWQ3CQkjIHB1dCBuZXcgZGlnaXQgaW4gZDdiCglzd2FwCQklZDcJCSMgcHV0IExFTiBjb3VudGVyIGluIHdvcmQgZDdhCglhZGRxLncJCSYxLCVkNwkJIyBzZXQgZDdhIHRvIHNpZ25hbCBmaXJzdCBkaWdpdCBkb25lCglkYmYudwkJJWQwLGxvb3AJIyBkbyBsb29wIHNvbWUgbW9yZSEKCXN3YXAJCSVkNwkJIyBwdXQgbGFzdCBkaWdpdCBpbiBzdHJpbmcKCWxzbC53CQkmNCwlZDcJCSMgbW92ZSBpdCB0byB1cHBlciA0IGJpdHMKCW1vdi5iCQklZDcsKCVhMCkrCSMgc3RvcmUgaXQgaW4gbWVtb3J5IHN0cmluZwojCiMgQ2xlYW4gdXAgYW5kIHJldHVybiB3aXRoIHJlc3VsdCBpbiBmcDAuCiMKZW5kX2JzdHI6Cgltb3ZtLmwJCSglc3ApKywmMHhmZgkjICB7JWQwLSVkN30KCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZmFjY19pbl9iKCk6IGRtZW1fcmVhZF9ieXRlIGZhaWxlZAkJCQkjCiMJZmFjY19pbl93KCk6IGRtZW1fcmVhZF93b3JkIGZhaWxlZAkJCQkjCiMJZmFjY19pbl9sKCk6IGRtZW1fcmVhZF9sb25nIGZhaWxlZAkJCQkjCiMJZmFjY19pbl9kKCk6IGRtZW1fcmVhZCBvZiBkYmwgcHJlYyBmYWlsZWQJCQkjCiMJZmFjY19pbl94KCk6IGRtZW1fcmVhZCBvZiBleHQgcHJlYyBmYWlsZWQJCQkjCiMJCQkJCQkJCQkjCiMJZmFjY19vdXRfYigpOiBkbWVtX3dyaXRlX2J5dGUgZmFpbGVkCQkJCSMKIwlmYWNjX291dF93KCk6IGRtZW1fd3JpdGVfd29yZCBmYWlsZWQJCQkJIwojCWZhY2Nfb3V0X2woKTogZG1lbV93cml0ZV9sb25nIGZhaWxlZAkJCQkjCiMJZmFjY19vdXRfZCgpOiBkbWVtX3dyaXRlIG9mIGRibCBwcmVjIGZhaWxlZAkJCSMKIwlmYWNjX291dF94KCk6IGRtZW1fd3JpdGUgb2YgZXh0IHByZWMgZmFpbGVkCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX3JlYWxfYWNjZXNzKCkgLSBleGl0IHRocm91Z2ggYWNjZXNzIGVycm9yIGhhbmRsZXIJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZsb3cganVtcHMgaGVyZSB3aGVuIGFuIEZQIGRhdGEgZmV0Y2ggY2FsbCBnZXRzIGFuIGVycm9yCSMKIyByZXN1bHQuIFRoaXMgbWVhbnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2FudHMgYW4gYWNjZXNzIGVycm9yIGZyYW1lCSMKIyBtYWRlIG91dCBvZiB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUuCQkJIwojCVNvLCB3ZSBmaXJzdCBjYWxsIHJlc3RvcmUoKSB3aGljaCBtYWtlcyBzdXJlIHRoYXQgYW55IHVwZGF0ZWQJIwojIC0oYW4pKyByZWdpc3RlciBnZXRzIHJldHVybmVkIHRvIGl0cyBwcmUtZXhjZXB0aW9uIHZhbHVlIGFuZCB0aGVuCSMKIyB3ZSBjaGFuZ2UgdGhlIHN0YWNrIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZS4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmZhY2NfaW5fYjoKCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTIxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS53CQlmYWNjX2ZpbmlzaAoKZmFjY19pbl93OgoJbW92cS5sCQkmMHgyLCVkMAkJCSMgdHdvIGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTQxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19pbl9sOgoJbW92cS5sCQkmMHg0LCVkMAkJCSMgZm91ciBieXRlcwoJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KCgltb3YudwkJJjB4MDEwMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCglicmEuYgkJZmFjY19maW5pc2gKCmZhY2NfaW5fZDoKCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19pbl94OgoJbW92cS5sCQkmMHhjLCVkMAkJCSMgdHdlbHZlIGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZmFjY19vdXRfYjoKCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCglic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KCgltb3YudwkJJjB4MDBhMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCglicmEuYgkJZmFjY19maW5pc2gKCmZhY2Nfb3V0X3c6Cgltb3ZxLmwJCSYweDIsJWQwCQkJIyB0d28gYnl0ZXMKCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgoKCW1vdi53CQkmMHgwMGMxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19vdXRfbDoKCW1vdnEubAkJJjB4NCwlZDAJCQkjIGZvdXIgYnl0ZXMKCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgoKCW1vdi53CQkmMHgwMDgxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19vdXRfZDoKCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KCgltb3YudwkJJjB4MDBlMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCglicmEuYgkJZmFjY19maW5pc2gKCmZhY2Nfb3V0X3g6Cgltb3YubAkJJjB4YywlZDAJCQkjIHR3ZWx2ZSBieXRlcwoJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCgoJbW92LncJCSYweDAwZTEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVwoKIyBoZXJlJ3Mgd2hlcmUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSBhY2Nlc3MgZXJyb3IgZnJhbWUgZnJvbSB0aGUKIyBjdXJyZW50IGV4Y2VwdGlvbiBzdGFjayBmcmFtZS4KZmFjY19maW5pc2g6Cgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19QQyglYTYpICMgc3RvcmUgY3VycmVudCBQQwoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCgltb3YubAkJKCVzcCksLSglc3ApCQkjIHN0b3JlIFNSLCBoaShQQykKCW1vdi5sCQkweDgoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQoJbW92LmwJCTB4Yyglc3ApLDB4OCglc3ApCSMgc3RvcmUgRUEKCW1vdi5sCQkmMHgwMDAwMDAwMSwweGMoJXNwKQkjIHN0b3JlIEZTTFcKCW1vdi53CQkweDYoJXNwKSwweGMoJXNwKQkjIGZpeCBGU0xXIChzaXplKQoJbW92LncJCSYweDQwMDgsMHg2KCVzcCkJIyBzdG9yZSB2b2ZmCgoJYnRzdAkJJjB4NSwoJXNwKQkJIyBzdXBlcnZpc29yIG9yIHVzZXIgbW9kZT8KCWJlcS5iCQlmYWNjX291dDIJCSMgdXNlcgoJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKCmZhY2Nfb3V0MjoKCWJyYS5sCQlfcmVhbF9hY2Nlc3MKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBpZiB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMgcHJlZGVjcmVtZW50IG9yIHBvc3RpbmNyZW1lbnQsCiMgdGhlIGVtdWxhdGlvbiBoYXMgYWxyZWFkeSBjaGFuZ2VkIGl0cyB2YWx1ZSB0byB0aGUgY29ycmVjdCBwb3N0LQojIGluc3RydWN0aW9uIHZhbHVlLiBidXQgc2luY2Ugd2UncmUgZXhpdGluZyB0byB0aGUgYWNjZXNzIGVycm9yCiMgaGFuZGxlciwgdGhlbiBBTiBtdXN0IGJlIHJldHVybmVkIHRvIGl0cyBwcmUtaW5zdHJ1Y3Rpb24gdmFsdWUuCiMgd2UgZG8gdGhhdCBoZXJlLgpyZXN0b3JlOgoJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCglhbmRpLmIJCSYweDM4LCVkMQkJIyBleHRyYWN0IG9wbW9kZQoJY21waS5iCQklZDEsJjB4MTgJCSMgcG9zdGluYz8KCWJlcS53CQlyZXN0X2luYwoJY21waS5iCQklZDEsJjB4MjAJCSMgcHJlZGVjPwoJYmVxLncJCXJlc3RfZGVjCglydHMKCnJlc3RfaW5jOgoJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCglhbmRpLncJCSYweDAwMDcsJWQxCQkjIGZldGNoIEFuCgoJbW92LncJCSh0YmxfcmVzdF9pbmMuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfcmVzdF9pbmMuYiwlcGMsJWQxLncqMSkKCnRibF9yZXN0X2luYzoKCXNob3J0CQlyaV9hMCAtIHRibF9yZXN0X2luYwoJc2hvcnQJCXJpX2ExIC0gdGJsX3Jlc3RfaW5jCglzaG9ydAkJcmlfYTIgLSB0YmxfcmVzdF9pbmMKCXNob3J0CQlyaV9hMyAtIHRibF9yZXN0X2luYwoJc2hvcnQJCXJpX2E0IC0gdGJsX3Jlc3RfaW5jCglzaG9ydAkJcmlfYTUgLSB0YmxfcmVzdF9pbmMKCXNob3J0CQlyaV9hNiAtIHRibF9yZXN0X2luYwoJc2hvcnQJCXJpX2E3IC0gdGJsX3Jlc3RfaW5jCgpyaV9hMDoKCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgZml4IHN0YWNrZWQgYTAKCXJ0cwpyaV9hMToKCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCSMgZml4IHN0YWNrZWQgYTEKCXJ0cwpyaV9hMjoKCXN1Yi5sCQklZDAsJWEyCQkJIyBmaXggYTIKCXJ0cwpyaV9hMzoKCXN1Yi5sCQklZDAsJWEzCQkJIyBmaXggYTMKCXJ0cwpyaV9hNDoKCXN1Yi5sCQklZDAsJWE0CQkJIyBmaXggYTQKCXJ0cwpyaV9hNToKCXN1Yi5sCQklZDAsJWE1CQkJIyBmaXggYTUKCXJ0cwpyaV9hNjoKCXN1Yi5sCQklZDAsKCVhNikJCSMgZml4IHN0YWNrZWQgYTYKCXJ0cwojIGlmIGl0J3MgYSBmbW92ZSBvdXQgaW5zdHJ1Y3Rpb24sIHdlIGRvbid0IGhhdmUgdG8gZml4IGE3CiMgYmVjYXVzZSB3ZSBoYWRuJ3QgY2hhbmdlZCBpdCB5ZXQuIGlmIGl0J3MgYW4gb3BjbGFzcyB0d28KIyBpbnN0cnVjdGlvbiAoZGF0YSBtb3ZlZCBpbikgYW5kIHRoZSBleGNlcHRpb24gd2FzIGluIHN1cGVydmlzb3IKIyBtb2RlLCB0aGVuIGFsc28gYWxzbyB3YXNuJ3QgdXBkYXRlZC4gaWYgaXQgd2FzIHVzZXIgbW9kZSwgdGhlbgojIHJlc3RvcmUgdGhlIGNvcnJlY3QgYTcgd2hpY2ggaXMgaW4gdGhlIFVTUCBjdXJyZW50bHkuCnJpX2E3OgoJY21waS5iCQlFWENfVk9GRiglYTYpLCYweDMwCSMgbW92ZSBpbiBvciBvdXQ/CglibmUuYgkJcmlfYTdfZG9uZQkJIyBvdXQKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPwoJYm5lLmIJCXJpX2E3X2RvbmUJCSMgc3VwZXJ2aXNvcgoJbW92YwkJJXVzcCwlYTAJCSMgcmVzdG9yZSBVU1AKCXN1Yi5sCQklZDAsJWEwCgltb3ZjCQklYTAsJXVzcApyaV9hN19kb25lOgoJcnRzCgojIG5lZWQgdG8gaW52ZXJ0IGFkanVzdG1lbnQgdmFsdWUgaWYgdGhlIDxlYT4gd2FzIHByZWRlYwpyZXN0X2RlYzoKCW5lZy5sCQklZDAKCWJyYS5iCQlyZXN0X2luYwo=