ZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWVlMWU3Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vZG9jL0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jICAgQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvciAtYXQtIGdtYWlsLmNvbT4KLSAgCi0jICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotIyAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi1wcm9qZWN0IGJvb3N0L2RvYyA7Ci1pbXBvcnQgYm9vc3Rib29rIDogYm9vc3Rib29rIDsKLQotYm9vc3Rib29rIGZ1bmN0aW9uLWRvYyAKLSAgICA6IAotICAgIGZ1bmN0aW9uLnhtbCAKLSAgICA6Ci0gICAgICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLgotICAgICAgICA8Zm9ybWF0PnBkZjo8eHNsOnBhcmFtPmJvb3N0LnVybC5wcmVmaXg9aHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvcmVsZWFzZS9kb2MvaHRtbAotICAgIDsKLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvZmFxLnhtbCBiL2xpYnMvZnVuY3Rpb24vZG9jL2ZhcS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YzU5NjEuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi9kb2MvZmFxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotICAgQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvciAtYXQtIGdtYWlsLmNvbT4KLSAgCi0gICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0gICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gIC0tPgotPCFET0NUWVBFIGxpYnJhcnkgUFVCTElDICItLy9Cb29zdC8vRFREIEJvb3N0Qm9vayBYTUwgVjEuMC8vRU4iCi0gICJodHRwOi8vd3d3LmJvb3N0Lm9yZy90b29scy9ib29zdGJvb2svZHRkL2Jvb3N0Ym9vay5kdGQiPgotPHNlY3Rpb24gaWQ9ImZ1bmN0aW9uLmZhcSIgbGFzdC1yZXZpc2lvbj0iJERhdGU6IDIwMDYtMTEtMDMgMTE6NDE6MTAgLTA4MDAgKEZyaSwgMDMgTm92IDIwMDYpICQiPgotICA8dGl0bGU+RnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnM8L3RpdGxlPgotCi08cWFuZGFzZXQ+Ci0gIDxxYW5kYWVudHJ5PgotICAgIDxxdWVzdGlvbj48cGFyYT5XaHkgY2FuJ3QgSSBjb21wYXJlCi0gICAgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4gb2JqZWN0cyB3aXRoCi0gICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gb3IKLSAgICA8Y29kZT5vcGVyYXRvciE9PC9jb2RlPj88L3BhcmE+PC9xdWVzdGlvbj4KLQotICAgIDxhbnN3ZXI+Ci0gICAgICA8cGFyYT5Db21wYXJpc29uIGJldHdlZW4gPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4KLSAgICAgIG9iamVjdHMgY2Fubm90IGJlIGltcGxlbWVudGVkICJ3ZWxsIiwgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCBiZQotICAgICAgaW1wbGVtZW50ZWQuIFRoZSB0eXBpY2FsIHNlbWFudGljcyByZXF1ZXN0ZWQgZm9yIDxjb2RlPmYgPT0KLSAgICAgIGc8L2NvZGU+IGdpdmVuIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+IG9iamVjdHMKLSAgICAgIDxjb2RlPmY8L2NvZGU+IGFuZCA8Y29kZT5nPC9jb2RlPiBhcmU6PC9wYXJhPgotICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5JZiA8Y29kZT5mPC9jb2RlPiBhbmQgPGNvZGU+ZzwvY29kZT4KLSAgICAgICAgICBzdG9yZSBmdW5jdGlvbiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUsIHVzZSB0aGF0IHR5cGUncwotICAgICAgICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IHRvIGNvbXBhcmUKLSAgICAgICAgICB0aGVtLjwvc2ltcGFyYT48L2xpc3RpdGVtPiAKLQotICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5JZiA8Y29kZT5mPC9jb2RlPiBhbmQgPGNvZGU+ZzwvY29kZT4KLSAgICAgICAgICBzdG9yZSBmdW5jdGlvbiBvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlcywgcmV0dXJuCi0gICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+Ljwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgIDxwYXJhPlRoZSBwcm9ibGVtIG9jY3VycyB3aGVuIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3RzCi0gICAgICBzdG9yZWQgYnkgYm90aCA8Y29kZT5mPC9jb2RlPiBhbmQgPGNvZGU+ZzwvY29kZT4gZG9lc24ndCBoYXZlIGFuCi0gICAgICA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPjogd2Ugd291bGQgbGlrZSB0aGUgZXhwcmVzc2lvbiA8Y29kZT5mID09Ci0gICAgICBnPC9jb2RlPiB0byBmYWlsIHRvIGNvbXBpbGUsIGFzIG9jY3VycyB3aXRoLCBlLmcuLCB0aGUgc3RhbmRhcmQKLSAgICAgIGNvbnRhaW5lcnMuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IGltcGxlbWVudGFibGUgZm9yCi0gICAgICA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiBiZWNhdXNlIGl0IG5lY2Vzc2FyaWx5Ci0gICAgICAiZXJhc2VzIiBzb21lIHR5cGUgaW5mb3JtYXRpb24gYWZ0ZXIgaXQgaGFzIGJlZW4gYXNzaWduZWQgYQotICAgICAgZnVuY3Rpb24gb2JqZWN0LCBzbyBpdCBjYW5ub3QgdHJ5IHRvIGNhbGwKLSAgICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IGxhdGVyOiBpdCBtdXN0IGVpdGhlciBmaW5kIGEgd2F5IHRvIGNhbGwKLSAgICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IG5vdywgb3IgaXQgd2lsbCBuZXZlciBiZSBhYmxlIHRvIGNhbGwgaXQKLSAgICAgIGxhdGVyLiBOb3RlLCBmb3IgaW5zdGFuY2UsIHdoYXQgaGFwcGVucyBpZiB5b3UgdHJ5IHRvIHB1dCBhCi0gICAgICA8Y29kZT5mbG9hdDwvY29kZT4gdmFsdWUgaW50byBhCi0gICAgICA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiBvYmplY3Q6IHlvdSB3aWxsIGdldCBhbgotICAgICAgZXJyb3IgYXQgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3Igb3IgY29uc3RydWN0b3IsIG5vdCBpbgotICAgICAgPGNvZGU+b3BlcmF0b3IoKTwvY29kZT4sIGJlY2F1c2UgdGhlIGZ1bmN0aW9uLWNhbGwgZXhwcmVzc2lvbgotICAgICAgbXVzdCBiZSBib3VuZCBpbiB0aGUgY29uc3RydWN0b3Igb3IgYXNzaWdubWVudCBvcGVyYXRvci48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSBtb3N0IHByb21pc2luZyBhcHByb2FjaCBpcyB0byBmaW5kIGEgbWV0aG9kIG9mCi0gICAgICBkZXRlcm1pbmluZyBpZiA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPiBjYW4gYmUgY2FsbGVkIGZvciBhCi0gICAgICBwYXJ0aWN1bGFyIHR5cGUsIGFuZCB0aGVuIHN1cHBvcnRpbmcgaXQgb25seSB3aGVuIGl0IGlzCi0gICAgICBhdmFpbGFibGU7IGluIG90aGVyIHNpdHVhdGlvbnMsIGFuIGV4Y2VwdGlvbiB3b3VsZCBiZQotICAgICAgdGhyb3duLiBIb3dldmVyLCB0byBkYXRlIHRoZXJlIGlzIG5vIGtub3duIHdheSB0byBkZXRlY3QgaWYgYW4KLSAgICAgIGFyYml0cmFyeSBvcGVyYXRvciBleHByZXNzaW9uIDxjb2RlPmYgPT0gZzwvY29kZT4gaXMgc3VpdGFibHkKLSAgICAgIGRlZmluZWQuIFRoZSBiZXN0IHNvbHV0aW9uIGtub3duIGhhcyB0aGUgZm9sbG93aW5nIHVuZGVzaXJhYmxlCi0gICAgICBxdWFsaXRpZXM6PC9wYXJhPgotCi0gICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5GYWlscyBhdCBjb21waWxlLXRpbWUgZm9yIG9iamVjdHMgd2hlcmUKLSAgICAgICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gaXMgbm90IGFjY2Vzc2libGUgKGUuZy4sIGJlY2F1c2UgaXQgaXMKLSAgICAgICAgPGNvZGU+cHJpdmF0ZTwvY29kZT4pLjwvc2ltcGFyYT48L2xpc3RpdGVtPgotCi0gICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5GYWlscyBhdCBjb21waWxlLXRpbWUgaWYgY2FsbGluZwotICAgICAgICA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPiBpcyBhbWJpZ3VvdXMuPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPkFwcGVhcnMgdG8gYmUgY29ycmVjdCBpZiB0aGUKLSAgICAgICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gZGVjbGFyYXRpb24gaXMgY29ycmVjdCwgZXZlbiB0aG91Z2gKLSAgICAgICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gbWF5IG5vdCBjb21waWxlLjwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgPHBhcmE+QWxsIG9mIHRoZXNlIHByb2JsZW1zIHRyYW5zbGF0ZSBpbnRvIGZhaWx1cmVzIGluIHRoZQotICAgICAgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4gY29uc3RydWN0b3JzIG9yCi0gICAgICBhc3NpZ25tZW50IG9wZXJhdG9yLCA8ZW1waGFzaXM+ZXZlbiBpZiB0aGUgdXNlciBuZXZlciBpbnZva2VzCi0gICAgICBvcGVyYXRvcj09PC9lbXBoYXNpcz4uIFdlIGNhbid0IGRvIHRoYXQgdG8gdXNlcnMuPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgb3RoZXIgb3B0aW9uIGlzIHRvIHBsYWNlIHRoZSBidXJkZW4gb24gdXNlcnMgdGhhdCB3YW50Ci0gICAgICB0byB1c2UgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4sIGUuZy4sIGJ5IHByb3ZpZGluZyBhbgotICAgICAgPGNvZGU+aXNfZXF1YWxpdHlfY29tcGFyYWJsZTwvY29kZT4gdHJhaXQgdGhleSBtYXkKLSAgICAgIHNwZWNpYWxpemUuIFRoaXMgaXMgYSB3b3JrYWJsZSBzb2x1dGlvbiwgYnV0IGlzIGRhbmdlcm91cyBpbgotICAgICAgcHJhY3RpY2UsIGJlY2F1c2UgZm9yZ2V0dGluZyB0byBzcGVjaWFsaXplIHRoZSB0cmFpdCB3aWxsIHJlc3VsdAotICAgICAgaW4gdW5leHBlY3RlZCBleGNlcHRpb25zIGJlaW5nIHRocm93biBmcm9tCi0gICAgICA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPidzCi0gICAgICA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPi4gVGhpcyBlc3NlbnRpYWxseSBuZWdhdGVzIHRoZSB1c2VmdWxuZXNzCi0gICAgICBvZiA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPiBpbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyBtb3N0Ci0gICAgICBkZXNpcmVkOiBtdWx0aXRhcmdldCBjYWxsYmFja3MuIFRoZQotICAgICAgPGxpYnJhcnluYW1lPlNpZ25hbHM8L2xpYnJhcnluYW1lPiBsaWJyYXJ5IGhhcyBhIHdheSBhcm91bmQKLSAgICAgIHRoaXMuPC9wYXJhPgotICAgIDwvYW5zd2VyPgotICA8L3FhbmRhZW50cnk+Ci0KLSAgPHFhbmRhZW50cnk+Ci0gICAgPHF1ZXN0aW9uPjxwYXJhPkkgc2VlIHZvaWQgcG9pbnRlcnM7IGlzIHRoaXMgW21lc3NdIHR5cGUgc2FmZT88L3BhcmE+PC9xdWVzdGlvbj4KLSAgICA8YW5zd2VyPgotPHBhcmE+WWVzLCA8Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uPC9jb21wdXRlcm91dHB1dD4gaXMgdHlwZQotc2FmZSBldmVuIHRob3VnaCBpdCB1c2VzIHZvaWQgcG9pbnRlcnMgYW5kIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucwotcmV0dXJuaW5nIHZvaWQgYW5kIHRha2luZyBubyBhcmd1bWVudHMuIEVzc2VudGlhbGx5LCBhbGwgdHlwZQotaW5mb3JtYXRpb24gaXMgZW5jb2RlZCBpbiB0aGUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIGFuZCBpbnZva2UKLWZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBmdW5jdGlvbiBvYmplY3RzLiBPbmx5IHRoZXNlIGZ1bmN0aW9ucyBhcmUKLWluc3RhbnRpYXRlZCB3aXRoIHRoZSBleGFjdCB0eXBlIHRoYXQgaXMgcG9pbnRlZCB0byBieSB0aGUgdm9pZAotcG9pbnRlciBvciBwb2ludGVyIHRvIHZvaWQgZnVuY3Rpb24uIFRoZSByZWFzb24gdGhhdCBib3RoIGFyZSByZXF1aXJlZAotaXMgdGhhdCBvbmUgbWF5IGNhc3QgYmV0d2VlbiB2b2lkIHBvaW50ZXJzIGFuZCBvYmplY3QgcG9pbnRlcnMgc2FmZWx5Ci1vciBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlcyBvZiBmdW5jdGlvbiBwb2ludGVycyAocHJvdmlkZWQgeW91IGRvbid0Ci1pbnZva2UgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGggdGhlIHdyb25nIHR5cGUpLiAgPC9wYXJhPgotICAgIDwvYW5zd2VyPgotICA8L3FhbmRhZW50cnk+Ci0KLSAgPHFhbmRhZW50cnk+Ci0gICAgPHF1ZXN0aW9uPjxwYXJhPldoeSBhcmUgdGhlcmUgd29ya2Fyb3VuZHMgZm9yIHZvaWQgcmV0dXJucz8gQysrIGFsbG93cyB0aGVtITwvcGFyYT48L3F1ZXN0aW9uPgotICAgIDxhbnN3ZXI+PHBhcmE+Vm9pZCByZXR1cm5zIGFyZSBwZXJtaXR0ZWQgYnkgdGhlIEMrKyBzdGFuZGFyZCwgYXMgaW4gdGhpcyBjb2RlIHNuaXBwZXQ6Ci08cHJvZ3JhbWxpc3Rpbmc+dm9pZCBmKCk7Ci12b2lkIGcoKSB7IHJldHVybiBmKCk7IH08L3Byb2dyYW1saXN0aW5nPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPiBUaGlzIGlzIGEgdmFsaWQgdXNhZ2Ugb2YgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IGJlY2F1c2Ugdm9pZCByZXR1cm5zIGFyZSBub3QgdXNlZC4gV2l0aCB2b2lkIHJldHVybnMsIHdlIHdvdWxkIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBpbGwtZm9ybWVkIGNvZGUgc2ltaWxhciB0bzoKLTxwcm9ncmFtbGlzdGluZz5pbnQgZigpOwotdm9pZCBnKCkgeyByZXR1cm4gZigpOyB9PC9wcm9ncmFtbGlzdGluZz4KLTwvcGFyYT4KLQotPHBhcmE+IEluIGVzc2VuY2UsIG5vdCB1c2luZyB2b2lkIHJldHVybnMgYWxsb3dzCi08Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uPC9jb21wdXRlcm91dHB1dD4gdG8gc3dhbGxvdyBhIHJldHVybiB2YWx1ZS4gVGhpcyBpcwotY29uc2lzdGVudCB3aXRoIGFsbG93aW5nIHRoZSB1c2VyIHRvIGFzc2lnbiBhbmQgaW52b2tlIGZ1bmN0aW9ucyBhbmQKLWZ1bmN0aW9uIG9iamVjdHMgd2l0aCBwYXJhbWV0ZXJzIHRoYXQgZG9uJ3QgZXhhY3RseSBtYXRjaC48L3BhcmE+Ci0KLSAgICA8L2Fuc3dlcj4KLSAgPC9xYW5kYWVudHJ5PgotCi0gIDxxYW5kYWVudHJ5PgotICAgIDxxdWVzdGlvbj48cGFyYT5XaHkgKGZ1bmN0aW9uKSBjbG9uaW5nPzwvcGFyYT48L3F1ZXN0aW9uPgotICAgIDxhbnN3ZXI+Ci0gICAgICA8cGFyYT5JbiBOb3ZlbWJlciBhbmQgRGVjZW1iZXIgb2YgMjAwMCwgdGhlIGlzc3VlIG9mIGNsb25pbmcKLSAgICAgIHZzLiByZWZlcmVuY2UgY291bnRpbmcgd2FzIGRlYmF0ZWQgYXQgbGVuZ3RoIGFuZCBpdCB3YXMgZGVjaWRlZAotICAgICAgdGhhdCBjbG9uaW5nIGdhdmUgbW9yZSBwcmVkaWN0YWJsZSBzZW1hbnRpY3MuIEkgd29uJ3QgcmVoYXNoIHRoZQotICAgICAgZGlzY3Vzc2lvbiBoZXJlLCBidXQgaWYgaXQgY2xvbmluZyBpcyBpbmNvcnJlY3QgZm9yIGEgcGFydGljdWxhcgotICAgICAgYXBwbGljYXRpb24gYSByZWZlcmVuY2UtY291bnRpbmcgYWxsb2NhdG9yIGNvdWxkIGJlIHVzZWQuPC9wYXJhPgotICAgIDwvYW5zd2VyPgotICA8L3FhbmRhZW50cnk+Ci0KLSAgPHFhbmRhZW50cnk+Ci0gICAgPHF1ZXN0aW9uPjxwYXJhPkhvdyBtdWNoIG92ZXJoZWFkIGRvZXMgYSBjYWxsIHRocm91Z2ggPGNvZGU+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT48L2NvZGU+IGluY3VyPzwvcGFyYT48L3F1ZXN0aW9uPgotICAgIDxhbnN3ZXI+Ci0gICAgICA8cGFyYT5UaGUgY29zdCBvZiA8Y29kZT5ib29zdDo6ZnVuY3Rpb248L2NvZGU+IGNhbiBiZSByZWFzb25hYmx5Ci0gICAgICBjb25zaXN0ZW50bHkgbWVhc3VyZWQgYXQgYXJvdW5kIDIwbnMgKy8tIDEwIG5zIG9uIGEgbW9kZXJuID4yR0h6Ci0gICAgICBwbGF0Zm9ybSB2ZXJzdXMgZGlyZWN0bHkgaW5saW5pbmcgdGhlIGNvZGUuPC9wYXJhPgotCi0gICAgICA8cGFyYT5Ib3dldmVyLCB0aGUgcGVyZm9ybWFuY2Ugb2YgeW91ciBhcHBsaWNhdGlvbiBtYXkgYmVuZWZpdAotICAgICAgZnJvbSBvciBiZSBkaXNhZHZhbnRhZ2VkIGJ5IDxjb2RlPmJvb3N0OjpmdW5jdGlvbjwvY29kZT4KLSAgICAgIGRlcGVuZGluZyBvbiBob3cgeW91ciBDKysgb3B0aW1pc2VyIG9wdGltaXNlcy4gIFNpbWlsYXIgdG8gYQotICAgICAgc3RhbmRhcmQgZnVuY3Rpb24gcG9pbnRlciwgZGlmZmVyZW5jZXMgb2Ygb3JkZXIgb2YgMTAlIGhhdmUgYmVlbgotICAgICAgbm90ZWQgdG8gdGhlIGJlbmVmaXQgb3IgZGlzYWR2YW50YWdlIG9mIHVzaW5nCi0gICAgICA8Y29kZT5ib29zdDo6ZnVuY3Rpb248L2NvZGU+IHRvIGNhbGwgYSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIGEKLSAgICAgIHRpZ2h0IGxvb3AgZGVwZW5kaW5nIG9uIHlvdXIgY29tcGlsYXRpb24gY2lyY3Vtc3RhbmNlcy48L3BhcmE+Ci0gICAgIAotICAgICAgPHBhcmE+W0Fuc3dlciBwcm92aWRlZCBieSBNYXR0IEh1cmQuIFNlZSA8dWxpbmsgdXJsPSJodHRwOi8vYXJ0aWNsZS5nbWFuZS5vcmcvZ21hbmUuY29tcC5saWIuYm9vc3QuZGV2ZWwvMzMyNzgiLz5dPC9wYXJhPgotICAgIDwvYW5zd2VyPgotICA8L3FhbmRhZW50cnk+Ci08L3FhbmRhc2V0PiAKLQotPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvZnVuY3Rpb24ueG1sIGIvbGlicy9mdW5jdGlvbi9kb2MvZnVuY3Rpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2YyOWZjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vZG9jL2Z1bmN0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IURPQ1RZUEUgbGlicmFyeSBQVUJMSUMgIi0vL0Jvb3N0Ly9EVEQgQm9vc3RCb29rIFhNTCBWMS4wLy9FTiIKLSAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL3Rvb2xzL2Jvb3N0Ym9vay9kdGQvYm9vc3Rib29rLmR0ZCI+Ci08bGlicmFyeSBuYW1lPSJGdW5jdGlvbiIgZGlybmFtZT0iZnVuY3Rpb24iIGlkPSJmdW5jdGlvbiIgCi0gICAgICAgICBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAwNC0wNy0yNCAxOTo1OTozMCAtMDcwMCAoU2F0LCAyNCBKdWwgMjAwNCkgJCIgCi0gICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+Ci08bGlicmFyeWluZm8+Ci0gIDxhdXRob3I+Ci0gICAgPGZpcnN0bmFtZT5Eb3VnbGFzPC9maXJzdG5hbWU+Ci0gICAgPHN1cm5hbWU+R3JlZ29yPC9zdXJuYW1lPgotICAgIDxlbWFpbD5kZ3JlZ29yIC1hdC0gY3MuaW5kaWFuYS5lZHU8L2VtYWlsPgotICA8L2F1dGhvcj4KLQotICA8Y29weXJpZ2h0PgotICAgIDx5ZWFyPjIwMDE8L3llYXI+Ci0gICAgPHllYXI+MjAwMjwveWVhcj4KLSAgICA8eWVhcj4yMDAzPC95ZWFyPgotICAgIDx5ZWFyPjIwMDQ8L3llYXI+Ci0gICAgPGhvbGRlcj5Eb3VnbGFzIEdyZWdvcjwvaG9sZGVyPgotICA8L2NvcHlyaWdodD4KLQotICA8bGVnYWxub3RpY2U+Ci0gICAgPHBhcmE+VXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdAotICAgIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlCi0gICAgPGZpbGVuYW1lPkxJQ0VOU0VfMV8wLnR4dDwvZmlsZW5hbWU+IG9yIGNvcHkgYXQgPHVsaW5rCi0gICAgdXJsPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvdWxpbms+KTwvcGFyYT4KLSAgPC9sZWdhbG5vdGljZT4KLQotICA8bGlicmFyeXB1cnBvc2U+RnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzIGZvciBkZWZlcnJlZCBjYWxscyBvciBjYWxsYmFja3M8L2xpYnJhcnlwdXJwb3NlPgotICA8bGlicmFyeWNhdGVnb3J5IG5hbWU9ImNhdGVnb3J5OmhpZ2hlci1vcmRlciIvPgotPC9saWJyYXJ5aW5mbz4KLQotPHRpdGxlPkJvb3N0LkZ1bmN0aW9uPC90aXRsZT4KLQotPHNlY3Rpb24gaWQ9ImZ1bmN0aW9uLmludHJvIj4KLTx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPiAKLTxwYXJhPlRoZSBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5IGNvbnRhaW5zIGEgZmFtaWx5IG9mIGNsYXNzIHRlbXBsYXRlcwotdGhhdCBhcmUgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzLiBUaGUgbm90aW9uIGlzIHNpbWlsYXIgdG8gYQotZ2VuZXJhbGl6ZWQgY2FsbGJhY2suIEl0IHNoYXJlcyBmZWF0dXJlcyB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzIGluCi10aGF0IGJvdGggZGVmaW5lIGEgY2FsbCBpbnRlcmZhY2UgKGUuZy4sIGEgZnVuY3Rpb24gdGFraW5nIHR3byBpbnRlZ2VyCi1hcmd1bWVudHMgYW5kIHJldHVybmluZyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlKSB0aHJvdWdoIHdoaWNoIHNvbWUKLWltcGxlbWVudGF0aW9uIGNhbiBiZSBjYWxsZWQsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBpbnZva2VkCi1tYXkgY2hhbmdlIHRocm91Z2hvdXQgdGhlIGNvdXJzZSBvZiB0aGUgcHJvZ3JhbS48L3BhcmE+Ci0KLTxwYXJhPiBHZW5lcmFsbHksIGFueSBwbGFjZSBpbiB3aGljaCBhIGZ1bmN0aW9uIHBvaW50ZXIgd291bGQgYmUgdXNlZAotdG8gZGVmZXIgYSBjYWxsIG9yIG1ha2UgYSBjYWxsYmFjaywgQm9vc3QuRnVuY3Rpb24gY2FuIGJlIHVzZWQgaW5zdGVhZAotdG8gYWxsb3cgdGhlIHVzZXIgZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCi10YXJnZXQuIFRhcmdldHMgY2FuIGJlIGFueSAnY29tcGF0aWJsZScgZnVuY3Rpb24gb2JqZWN0IChvciBmdW5jdGlvbgotcG9pbnRlciksIG1lYW5pbmcgdGhhdCB0aGUgYXJndW1lbnRzIHRvIHRoZSBpbnRlcmZhY2UgZGVzaWduYXRlZCBieQotQm9vc3QuRnVuY3Rpb24gY2FuIGJlIGNvbnZlcnRlZCB0byB0aGUgYXJndW1lbnRzIG9mIHRoZSB0YXJnZXQKLWZ1bmN0aW9uIG9iamVjdC48L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTx4aTppbmNsdWRlIGhyZWY9Imhpc3RvcnkueG1sIi8+Ci08eGk6aW5jbHVkZSBocmVmPSJ0dXRvcmlhbC54bWwiLz4KLTx4aTppbmNsdWRlIGhyZWY9InJlZmVyZW5jZS54bWwiLz4KLTx4aTppbmNsdWRlIGhyZWY9ImZhcS54bWwiLz4KLTx4aTppbmNsdWRlIGhyZWY9Im1pc2MueG1sIi8+Ci08eGk6aW5jbHVkZSBocmVmPSJ0ZXN0cy54bWwiLz4KLQotPC9saWJyYXJ5PgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvaGlzdG9yeS54bWwgYi9saWJzL2Z1bmN0aW9uL2RvYy9oaXN0b3J5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmMTNlMi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL2RvYy9oaXN0b3J5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotICAgQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvciAtYXQtIGdtYWlsLmNvbT4KLSAgCi0gICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0gICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gIC0tPgotPCFET0NUWVBFIGxpYnJhcnkgUFVCTElDICItLy9Cb29zdC8vRFREIEJvb3N0Qm9vayBYTUwgVjEuMC8vRU4iCi0gICJodHRwOi8vd3d3LmJvb3N0Lm9yZy90b29scy9ib29zdGJvb2svZHRkL2Jvb3N0Ym9vay5kdGQiPgotPHNlY3Rpb24gaWQ9ImZ1bmN0aW9uLmhpc3RvcnkiIGxhc3QtcmV2aXNpb249IiREYXRlOiAyMDEzLTA2LTE1IDAwOjA2OjI2IC0wNzAwIChTYXQsIDE1IEp1biAyMDEzKSAkIj4KLSAgPHRpdGxlPkhpc3RvcnkgJmFtcDsgQ29tcGF0aWJpbGl0eSBOb3RlczwvdGl0bGU+Ci0KLTxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0KLSAgPGxpc3RpdGVtPjxwYXJhPjxib2xkPlZlcnNpb24gMS41Mi4wPC9ib2xkPjogPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICAgICA8bGlzdGl0ZW0+PHBhcmE+TW92ZSBjb25zdHJ1Y3RvcnMgYW5kIG1vdmUgYXNzaWdubWVudCAKLSAgICAgIG9wZXJhdG9ycyBhZGRlZCAob25seSBmb3IgY29tcGlsZXJzIHdpdGggQysrMTEgcnZhbHVlIAotICAgICAgcmVmZXJlbmNlcyBzdXBwb3J0KS4gT3JpZ2luYWwgcGF0Y2gKLSAgICAgIGNvbnRyaWJ1dGVkIGJ5IEFudG9ueSBQb2x1a2hpbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9saXN0aXRlbT4KLQotICA8bGlzdGl0ZW0+PHBhcmE+PGJvbGQ+VmVyc2lvbiAxLjM3LjA8L2JvbGQ+OiA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT5JbXByb3ZlZCB0aGUgcGVyZm9ybWFuY2Ugb2YgQm9vc3QuRnVuY3Rpb24ncwotICAgICAgc3dhcCgpIG9wZXJhdGlvbiBmb3IgbGFyZ2UgZnVuY3Rpb24gb2JqZWN0cy4gT3JpZ2luYWwgcGF0Y2gKLSAgICAgIGNvbnRyaWJ1dGVkIGJ5IE5pZWxzIERla2tlci48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZGVkIGEgbmV3IGhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb24vZnVuY3Rpb25fdHlwZW9mLmhwcCZndDsgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciB1c2luZyB0aGUgQm9vc3QuVHlwZW9mIGxpYnJhcnkgb24gQm9vc3QuRnVuY3Rpb24gb2JqZWN0cy48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZGVkIGEgbmV3IGhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb24vZnVuY3Rpb25fZndkLmhwcCZndDsgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciB1c2luZyB0aGUgQm9vc3QuVHlwZW9mIGxpYnJhcnkgb24gQm9vc3QuRnVuY3Rpb24gb2JqZWN0cy48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8bWV0aG9kbmFtZSBhbHQ9ImJvb3N0OjpmdW5jdGlvbjo6dGFyZ2V0Ij50YXJnZXQ8L21ldGhvZG5hbWU+KCkKLSAgICAgIGZ1bmN0aW9uIG5vdyByZXNwZWN0cyB0aGUgY3YtcXVhbGlmaWVycyBvZiBmdW5jdGlvbiBvYmplY3RzCi0gICAgICBzdG9yZWQgYnkgcmVmZXJlbmNlCi0gICAgICAodXNpbmcgPGNsYXNzbmFtZT5ib29zdDo6cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4pLCBzdWNoCi0gICAgICB0aGF0IGEgcmVmZXJlbmNlIHRvIGEgPGNvZGU+Y29uc3Q8L2NvZGU+IGZ1bmN0aW9uIG9iamVjdCBjYW5ub3QKLSAgICAgIGJlIGFjY2Vzc2VkIGFzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLTxjb2RlPmNvbnN0PC9jb2RlPiBmdW5jdGlvbgotICAgICAgb2JqZWN0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L2xpc3RpdGVtPgotCi0gIDxsaXN0aXRlbT48cGFyYT48Ym9sZD5WZXJzaW9uIDEuMzYuMDwvYm9sZD46IDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgICAgPGxpc3RpdGVtPjxwYXJhPkJvb3N0LkZ1bmN0aW9uIG5vdyBpbXBsZW1lbnRzIGFsbG9jYXRvciBzdXBwb3J0Ci0gICAgICBpbiB0aGUgc2FtZSB3YXkgdGhhdCBpcyBpcyBwcm92aWRlZCBpbiBDKysweCwgYmFzZWQgb24gQysrCi0gICAgICBjb21taXR0ZWUKLSAgICAgIHByb3Bvc2FsIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjIzMDguaHRtbCI+TjIzMDg8L3VsaW5rPi4gVGhpcwotICAgICAgY2hhbmdlIHJlbW92ZXMgdGhlIDxjb21wdXRlcm91dHB1dD5BbGxvY2F0b3I8L2NvbXB1dGVyb3V0cHV0PgotICAgICAgdGVtcGxhdGUgcGFyYW1ldGVyIG9mIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+IGluCi0gICAgICBmYXZvciBvZiBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQuIFdoaWxlIHRoaXMgaXMgYQotICAgICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIGNoYW5nZSwgaXQgaXMgbGlrZWx5IHRvIGFmZmVjdCBvbmx5IGEgZmV3Ci0gICAgICB1c2Vycy4gVGhpcyBjaGFuZ2UgdG8gRnVuY3Rpb24gd2FzIGNvbnRyaWJ1dGVkIGJ5IEVtaWwKLSAgICAgIERvdGNoZXZza2ksIHdoaWNoIGFsc28gYXV0aG9yZWQgdGhlIGNvcnJlc3BvbmRpbmcgQysrIGNvbW1pdHRlZQotICAgICAgcHJvcG9zYWwuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gIDwvbGlzdGl0ZW0+Ci0KLSAgPGxpc3RpdGVtPjxwYXJhPjxib2xkPlZlcnNpb24gMS4zNC4wPC9ib2xkPjogPC9wYXJhPiAKLSAgICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgICAgPGxpc3RpdGVtPjxwYXJhPkJvb3N0LkZ1bmN0aW9uIG5vdyBpbXBsZW1lbnRzIGEgc21hbGwgYnVmZmVyIG9wdGltaXphdGlvbiwgd2hpY2ggY2FuIGRyYXN0aWNhbGx5IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIHdoZW4gY29weWluZyBvciBjb25zdHJ1Y3Rpb24gQm9vc3QuRnVuY3Rpb24gb2JqZWN0cyBzdG9yaW5nIHNtYWxsIGZ1bmN0aW9uIG9iamVjdHMuIEZvciBpbnN0YW5jZSwgPGNvZGU+YmluZCgmYW1wO1g6Zm9vLCAmYW1wO3gsIF8xLCBfMik8L2NvZGU+IHJlcXVpcmVzIG5vIGhlYXAgYWxsb2NhdGlvbiB3aGVuIHBsYWNlZCBpbnRvIGEgQm9vc3QuRnVuY3Rpb24gb2JqZWN0LiBOb3RlIHRoYXQgc29tZSBleGNlcHRpb24tc2FmZXR5IGd1YXJhbnRlZXMgaGF2ZSBjaGFuZ2VkOiBhc3NpZ25tZW50IHByb3ZpZGVzIHRoZSBiYXNpYyBleGNlcHRpb24gZ3VhcmFudGVlIGFuZCA8Y29kZT5zd2FwKCk8L2NvZGU+IG1heSB0aHJvdy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9saXN0aXRlbT4KLQotICA8bGlzdGl0ZW0+PHBhcmE+PGJvbGQ+VmVyc2lvbiAxLjMwLjA8L2JvbGQ+OiA8L3BhcmE+IAotICAgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxsIGZlYXR1cmVzIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxLjI5LjAgaGF2ZQotICAgICAgYmVlbiByZW1vdmVkIGZyb20gQm9vc3QuRnVuY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gCi0gICAgICA8bGlzdGl0ZW0+PHBhcmE+PGNvZGU+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT48L2NvZGU+Ci0gICAgICBhbmQgPGNvZGU+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb25OPC9jbGFzc25hbWU+PC9jb2RlPiBvYmplY3RzCi0gICAgICBjYW4gYmUgYXNzaWduZWQgdG8gMCAoc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgICAgPGNvZGU+PG1ldGhvZG5hbWUKLSAgICAgIGFsdD0iYm9vc3Q6OmZ1bmN0aW9uOjpjbGVhciI+Y2xlYXI8L21ldGhvZG5hbWU+KCk8L2NvZGU+KSBhbmQKLSAgICAgIGNvbXBhcmVkIGFnYWluc3QgMCAoc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgICAgPGNvZGU+PG1ldGhvZG5hbWUKLSAgICAgIGFsdD0iYm9vc3Q6OmZ1bmN0aW9uOjplbXB0eSI+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+KS48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBCb29zdC5GdW5jdGlvbiBjb2RlIGlzIG5vdyBnZW5lcmF0ZWQKLSAgICAgIGVudGlyZWx5IGJ5IHRoZSA8bGlicmFyeW5hbWU+UHJlcHJvY2Vzc29yPC9saWJyYXJ5bmFtZT4gbGlicmFyeSwKLSAgICAgIHNvIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBnZW5lcmF0ZQotICAgICAgPGNvZGU+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT48L2NvZGU+IGFuZAotICAgICAgPGNvZGU+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb25OPC9jbGFzc25hbWU+PC9jb2RlPiBjbGFzcwotICAgICAgdGVtcGxhdGVzIGZvciBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQotICAgICAgPGNsYXNzbmFtZT5ib29zdDo6YmFkX2Z1bmN0aW9uX2NhbGw8L2NsYXNzbmFtZT4gZXhjZXB0aW9uIGNsYXNzCi0gICAgICB3YXMgaW50cm9kdWNlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L2xpc3RpdGVtPgotCi0gIDxsaXN0aXRlbT48cGFyYT48Ym9sZD5WZXJzaW9uIDEuMjkuMDwvYm9sZD46Ci0gIEJvb3N0LkZ1bmN0aW9uIGhhcyBiZWVuIHBhcnRpYWxseSByZWRlc2lnbmVkIHRvIG1pbmltaXplIHRoZQotICBpbnRlcmZhY2UgYW5kIG1ha2UgaXQgY2xlYW5lci4gU2V2ZXJhbCBzZWxkb20tIG9yIG5ldmVyLXVzZWQKLSAgZmVhdHVyZXMgb2YgdGhlIG9sZGVyIEJvb3N0LkZ1bmN0aW9uIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsCi0gIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlLiBIZXJlIGlzIGEgbGlzdCBvZiBmZWF0dXJlcyB0aGF0IGhhdmUKLSAgYmVlbiBkZXByZWNhdGVkLCB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGUgZGVwcmVjYXRpb25zLCBhbmQgaG93IHRvCi0gIGFkanVzdCB5b3VyIGNvZGU6Ci0KLTxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gIDxsaXN0aXRlbT48cGFyYT5UaGUgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IGNsYXNzIHRlbXBsYXRlIHN5bnRheCBoYXMKLSAgY2hhbmdlZC4gVGhlIG9sZCBzeW50YXgsIGUuZy4sIDxjb21wdXRlcm91dHB1dD5ib29zdDo6ZnVuY3Rpb24mbHQ7aW50LCBmbG9hdCwKLSAgZG91YmxlLCBzdGQ6OnN0cmluZyZndDs8L2NvbXB1dGVyb3V0cHV0PiwgaGFzIGJlZW4gY2hhbmdlZCB0byBhIG1vcmUgbmF0dXJhbAotICBzeW50YXggPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbiZsdDtpbnQgKGZsb2F0LCBkb3VibGUsCi0gIHN0ZDo6c3RyaW5nKSZndDs8L2NvbXB1dGVyb3V0cHV0Piwgd2hlcmUgYWxsIHJldHVybiBhbmQgYXJndW1lbnQgdHlwZXMgYXJlCi0gIGVuY29kZWQgaW4gYSBzaW5nbGUgZnVuY3Rpb24gdHlwZSBwYXJhbWV0ZXIuIEFueSBvdGhlciB0ZW1wbGF0ZQotICBwYXJhbWV0ZXJzIChlLmcuLCB0aGUgPGNvbXB1dGVyb3V0cHV0PkFsbG9jYXRvcjwvY29tcHV0ZXJvdXRwdXQ+KSBmb2xsb3cgdGhpcyBzaW5nbGUKLSAgcGFyYW1ldGVyLjwvcGFyYT4KLQotICA8cGFyYT4gVGhlIHJlc29sdXRpb24gdG8gdGhpcyBjaGFuZ2UgZGVwZW5kcyBvbiB0aGUKLSAgYWJpbGl0aWVzIG9mIHlvdXIgY29tcGlsZXI6IGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgdGVtcGxhdGUKLSAgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBhbmQgY2FuIHBhcnNlIGZ1bmN0aW9uIHR5cGVzIChtb3N0IGRvKSwgbW9kaWZ5IAotICB5b3VyIGNvZGUgdG8gdXNlIHRoZSBuZXdlcgotICBzeW50YXggKHByZWZlcmFibGUpIG9yIGRpcmVjdGx5IHVzZSBvbmUgb2YgdGhlCi0gIDxjb21wdXRlcm91dHB1dD5mdW5jdGlvbk48L2NvbXB1dGVyb3V0cHV0PiBjbGFzc2VzIHdob3NlIHN5bnRheCBoYXMgbm90Ci0gIGNoYW5nZWQuIElmIHlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0ZW1wbGF0ZSBwYXJ0aWFsCi0gIHNwZWNpYWxpemF0aW9uIG9yIGZ1bmN0aW9uIHR5cGVzLCB5b3UgbXVzdCB0YWtlIHRoZSBsYXR0ZXIgb3B0aW9uIGFuZCAKLSAgdXNlIHRoZSBudW1iZXJlZCBCb29zdC5GdW5jdGlvbiBjbGFzc2VzLiBUaGlzIG9wdGlvbiBtZXJlbHkgcmVxdWlyZXMgCi0gIGNoYW5naW5nIHR5cGVzIHN1Y2ggYXMgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbiZsdDt2b2lkLCBpbnQsIGludCZndDs8L2NvbXB1dGVyb3V0cHV0PgotICB0byA8Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uMiZsdDt2b2lkLCBpbnQsIGludCZndDs8L2NvbXB1dGVyb3V0cHV0PiAoYWRkaW5nIHRoZSBudW1iZXIgb2YKLSAgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGNsYXNzIG5hbWUpLjwvcGFyYT4KLQotICA8cGFyYT4gU3VwcG9ydCBmb3IgdGhlIG9sZCBzeW50YXggd2l0aCB0aGUKLSAgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IGNsYXNzIHRlbXBsYXRlIHdpbGwgcGVyc2lzdCBmb3IgYSBzaG9ydAotICB3aGlsZSwgYnV0IHdpbGwgZXZlbnR1YWxseSBiZSByZW1vdmVkIHNvIHRoYXQgd2UgY2FuIHByb3ZpZGUgYmV0dGVyCi0gIGVycm9yIG1lc3NhZ2VzIGFuZCBsaW5rIGNvbXBhdGliaWxpdHkuIDwvcGFyYT48L2xpc3RpdGVtPiAKLQotICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGludm9jYXRpb24KLSAgcG9saWN5IHRlbXBsYXRlIHBhcmFtZXRlciAoPGNvbXB1dGVyb3V0cHV0PlBvbGljeTwvY29tcHV0ZXJvdXRwdXQ+KSBoYXMgYmVlbiBkZXByZWNhdGVkCi0gIGFuZCB3aWxsIGJlIHJlbW92ZWQuIFRoZXJlIGlzIG5vIGRpcmVjdCBlcXVpdmFsZW50IHRvIHRoaXMgcmFyZWx5Ci0gIHVzZWQgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4gCi0KLSAgPGxpc3RpdGVtPjxwYXJhPlRoZSBtaXhpbiB0ZW1wbGF0ZSBwYXJhbWV0ZXIKLSAgKDxjb21wdXRlcm91dHB1dD5NaXhpbjwvY29tcHV0ZXJvdXRwdXQ+KSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIFRoZXJlCi0gIGlzIG5vdCBkaXJlY3QgZXF1aXZhbGVudCB0byB0aGlzIHJhcmVseSB1c2VkIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+IAotCi0gIDxsaXN0aXRlbT48cGFyYT5UaGUKLSAgPGNvbXB1dGVyb3V0cHV0PnNldDwvY29tcHV0ZXJvdXRwdXQ+IG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKLSAgcmVtb3ZlZC4gVXNlIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGluc3RlYWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci08L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08L2l0ZW1pemVkbGlzdD4KLTwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL21pc2MueG1sIGIvbGlicy9mdW5jdGlvbi9kb2MvbWlzYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZjRmYjUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi9kb2MvbWlzYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotICAgQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvciAtYXQtIGdtYWlsLmNvbT4KLSAgCi0gICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0gICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gIC0tPgotPCFET0NUWVBFIGxpYnJhcnkgUFVCTElDICItLy9Cb29zdC8vRFREIEJvb3N0Qm9vayBYTUwgVjEuMC8vRU4iCi0gICJodHRwOi8vd3d3LmJvb3N0Lm9yZy90b29scy9ib29zdGJvb2svZHRkL2Jvb3N0Ym9vay5kdGQiPgotPHNlY3Rpb24gaWQ9ImZ1bmN0aW9uLm1pc2MiIGxhc3QtcmV2aXNpb249IiREYXRlOiAyMDA4LTA3LTE0IDExOjMyOjI5IC0wNzAwIChNb24sIDE0IEp1bCAyMDA4KSAkIj4KLSAgPHRpdGxlPk1pc2NlbGxhbmVvdXMgTm90ZXM8L3RpdGxlPgotCi0gIDxzZWN0aW9uPgotICAgIDx0aXRsZT5Cb29zdC5GdW5jdGlvbiB2cy4gRnVuY3Rpb24gUG9pbnRlcnM8L3RpdGxlPgotPHBhcmE+Qm9vc3QuRnVuY3Rpb24gaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIGZ1bmN0aW9uIHBvaW50ZXJzLCBuYW1lbHk6Ci0KLTxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+PHBhcmE+Qm9vc3QuRnVuY3Rpb24gYWxsb3dzIGFyYml0cmFyeSBjb21wYXRpYmxlIGZ1bmN0aW9uIG9iamVjdHMgdG8gYmUgdGFyZ2V0cyAoaW5zdGVhZCBvZiByZXF1aXJpbmcgYW4gZXhhY3QgZnVuY3Rpb24gc2lnbmF0dXJlKS48L3BhcmE+PC9saXN0aXRlbT4KLSAgIDxsaXN0aXRlbT48cGFyYT5Cb29zdC5GdW5jdGlvbiBtYXkgYmUgdXNlZCB3aXRoIGFyZ3VtZW50LWJpbmRpbmcgYW5kIG90aGVyIGZ1bmN0aW9uIG9iamVjdCBjb25zdHJ1Y3Rpb24gbGlicmFyaWVzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPjxwYXJhPkJvb3N0LkZ1bmN0aW9uIGhhcyBwcmVkaWN0aWJsZSBiZWhhdmlvciB3aGVuIGFuIGVtcHR5IGZ1bmN0aW9uIG9iamVjdCBpcyBjYWxsZWQuIDwvcGFyYT48L2xpc3RpdGVtPgotPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgotCi08cGFyYT4gQW5kLCBvZiBjb3Vyc2UsIGZ1bmN0aW9uIHBvaW50ZXJzIGhhdmUgc2V2ZXJhbCBhZHZhbnRhZ2VzIG92ZXIgQm9vc3QuRnVuY3Rpb246Ci0KLTxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPiBGdW5jdGlvbiBwb2ludGVycyBhcmUgc21hbGxlciAodGhlIHNpemUgb2Ygb25lIHBvaW50ZXIgaW5zdGVhZCBvZiBmb3VyIG9yIG1vcmUpIDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT4gRnVuY3Rpb24gcG9pbnRlcnMgYXJlIGZhc3RlciAoQm9vc3QuRnVuY3Rpb24gbWF5IHJlcXVpcmUgdHdvIGNhbGxzIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMpIDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT4gRnVuY3Rpb24gcG9pbnRlcnMgYXJlIGJhY2t3YXJkLWNvbXBhdGlibGUgd2l0aCBDIGxpYnJhcmllcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+IE1vcmUgcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMuIDwvcGFyYT48L2xpc3RpdGVtPgotPC9pdGVtaXplZGxpc3Q+Ci08L3BhcmE+Ci0gIDwvc2VjdGlvbj4KLQotICA8c2VjdGlvbj4KLSAgICA8dGl0bGU+UGVyZm9ybWFuY2U8L3RpdGxlPgotCi08c2VjdGlvbj4KLSAgPHRpdGxlPkZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyIHNpemU8L3RpdGxlPgotICA8cGFyYT4gRnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzIHdpbGwgYmUgdGhlIHNpemUgb2YgYSBzdHJ1Y3QgY29udGFpbmluZyBhIG1lbWJlciBmdW5jdGlvbiBwb2ludGVyIGFuZCB0d28gZGF0YSBwb2ludGVycy4gVGhlIGFjdHVhbCBzaXplIGNhbiB2YXJ5IHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtOyBvbiAzMi1iaXQgTWFjIE9TIFggd2l0aCBHQ0MsIHRoaXMgYW1vdW50cyB0byAxNiBieXRlcywgd2hpbGUgaXQgaXMgMzIgYnl0ZXMgV2luZG93cyB3aXRoIFZpc3VhbCBDKysuIEFkZGl0aW9uYWxseSwgdGhlIGZ1bmN0aW9uIG9iamVjdCB0YXJnZXQgbWF5IGJlIGFsbG9jYXRlZCBvbiB0aGUgaGVhcCwgaWYgaXQgY2Fubm90IGJlIHBsYWNlZCBpbnRvIHRoZSBzbWFsbC1vYmplY3QgYnVmZmVyIGluIHRoZSA8Y29kZT5ib29zdDo6ZnVuY3Rpb248L2NvZGU+IG9iamVjdC48L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uPgotICA8dGl0bGU+Q29weWluZyBlZmZpY2llbmN5PC90aXRsZT4KLSAgPHBhcmE+IENvcHlpbmcgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzIG1heSByZXF1aXJlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhIGNvcHkgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdCB0YXJnZXQuIFRoZSBkZWZhdWx0IGFsbG9jYXRvciBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIGZhc3RlciBjdXN0b20gYWxsb2NhdG9yIG9yIG9uZSBtYXkgY2hvb3NlIHRvIGFsbG93IHRoZSBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlcnMgdG8gb25seSBzdG9yZSBmdW5jdGlvbiBvYmplY3QgdGFyZ2V0cyBieSByZWZlcmVuY2UgKHVzaW5nIDxjb21wdXRlcm91dHB1dD5yZWY8L2NvbXB1dGVyb3V0cHV0PikgaWYgdGhlIGNvc3Qgb2YgdGhpcyBjbG9uaW5nIGJlY29tZXMgcHJvaGliaXRpdmUuIFNtYWxsIGZ1bmN0aW9uIG9iamVjdHMgY2FuIGJlIHN0b3JlZCB3aXRoaW4gdGhlIDxjb2RlPmJvb3N0OjpmdW5jdGlvbjwvY29kZT4gb2JqZWN0IGl0c2VsZiwgaW1wcm92aW5nIGNvcHlpbmcgZWZmaWNpZW5jeS48L3BhcmE+Ci0gPC9zZWN0aW9uPgotCi08c2VjdGlvbj4KLSAgPHRpdGxlPkludm9jYXRpb24gZWZmaWNpZW5jeTwvdGl0bGU+Ci08cGFyYT4gV2l0aCBhIHByb3Blcmx5IGlubGluaW5nIGNvbXBpbGVyLCBhbiBpbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24gb2JqZWN0IHJlcXVpcmVzIG9uZSBjYWxsIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyLiBJZiB0aGUgY2FsbCBpcyB0byBhIGZyZWUgZnVuY3Rpb24gcG9pbnRlciwgYW4gYWRkaXRpb25hbCBjYWxsIG11c3QgYmUgbWFkZSB0byB0aGF0IGZ1bmN0aW9uIHBvaW50ZXIgKHVubGVzcyB0aGUgY29tcGlsZXIgaGFzIHZlcnkgcG93ZXJmdWwgaW50ZXJwcm9jZWR1cmFsIGFuYWx5c2lzKS48L3BhcmE+Ci0gIDwvc2VjdGlvbj4KLTwvc2VjdGlvbj4KLQotICA8c2VjdGlvbj4KLSAgICA8dGl0bGU+Q29tYmF0dGluZyB2aXJ0dWFsIGZ1bmN0aW9uICJibG9hdCI8L3RpdGxlPgotPHBhcmE+IFRoZSB1c2Ugb2YgdmlydHVhbCBmdW5jdGlvbnMgdGVuZHMgdG8gY2F1c2UgJ2NvZGUgYmxvYXQnIG9uIG1hbnkgY29tcGlsZXJzLiBXaGVuIGEgY2xhc3MgY29udGFpbnMgYSB2aXJ0dWFsIGZ1bmN0aW9uLCBpdCBpcyBuZWNlc3NhcnkgdG8gZW1pdCBhbiBhZGRpdGlvbmFsIGZ1bmN0aW9uIHRoYXQgY2xhc3NpZmllcyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LiBJdCBoYXMgYmVlbiBvdXIgZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGF1eGlsaWFyeSBmdW5jdGlvbnMgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgc2lnbmlmaWNhbnRseSB3aGVuIG1hbnkgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IG9iamVjdHMgYXJlIHVzZWQuIDwvcGFyYT4KLQotPHBhcmE+IEluIEJvb3N0LkZ1bmN0aW9uLCBhbiBhbHRlcm5hdGl2ZSBidXQgZXF1aXZhbGVudCBhcHByb2FjaCB3YXMgdGFrZW4gdXNpbmcgZnJlZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiB2aXJ0dWFsIGZ1bmN0aW9ucy4gVGhlIEJvb3N0LkZ1bmN0aW9uIG9iamVjdCBlc3NlbnRpYWxseSBob2xkcyB0d28gcG9pbnRlcnMgdG8gbWFrZSBhIHZhbGlkIHRhcmdldCBjYWxsOiBhIHZvaWQgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gb2JqZWN0IGl0IGNvbnRhaW5zIGFuZCBhIHZvaWQgcG9pbnRlciB0byBhbiAiaW52b2tlciIgdGhhdCBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LCBnaXZlbiB0aGUgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBpbnZva2VyIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIHZhbHVlIGNvbnZlcnNpb25zIEJvb3N0LkZ1bmN0aW9uIHByb3ZpZGVzLiBBIHRoaXJkIHBvaW50ZXIgcG9pbnRzIHRvIGEgZnJlZSBmdW5jdGlvbiBjYWxsZWQgdGhlICJtYW5hZ2VyIiwgd2hpY2ggaGFuZGxlcyB0aGUgY2xvbmluZyBhbmQgZGVzdHJ1Y3Rpb24gb2YgZnVuY3Rpb24gb2JqZWN0cy4gVGhlIHNjaGVtZSBpcyB0eXBlc2FmZSBiZWNhdXNlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGhhbmRsZSB0aGUgZnVuY3Rpb24gb2JqZWN0LCB0aGUgaW52b2tlciBhbmQgdGhlIG1hbmFnZXIsIGFyZSBpbnN0YW50aWF0ZWQgZ2l2ZW4gdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdCwgc28gdGhleSBjYW4gc2FmZWx5IGNhc3QgdGhlIGluY29taW5nIHZvaWQgcG9pbnRlciAodGhlIGZ1bmN0aW9uIG9iamVjdCBwb2ludGVyKSB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZS48L3BhcmE+Ci0gIDwvc2VjdGlvbj4KLQotICA8c2VjdGlvbj4KLSAgICA8dGl0bGU+QWNrbm93bGVkZ2VtZW50czwvdGl0bGU+IAotCi0gICAgPHBhcmE+IE1hbnkgcGVvcGxlIHdlcmUgaW52b2x2ZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGlzCi0gICAgbGlicmFyeS4gV2lsbGlhbSBLZW1wZiwgSmVzc2UgSm9uZXMgYW5kIEthcmwgTmVsc29uIHdlcmUgYWxsCi0gICAgZXh0cmVtZWx5IGhlbHBmdWwgaW4gaXNvbGF0aW5nIGFuIGludGVyZmFjZSBhbmQgc2NvcGUgZm9yIHRoZQotICAgIGxpYnJhcnkuIEpvaG4gTWFkZG9jayBtYW5hZ2VkIHRoZSBmb3JtYWwgcmV2aWV3LCBhbmQgbWFueQotICAgIHJldmlld2VycyBnYXZlIGV4Y2VsbGVudCBjb21tZW50cyBvbiBpbnRlcmZhY2UsIGltcGxlbWVudGF0aW9uLAotICAgIGFuZCBkb2N1bWVudGF0aW9uLiBQZXRlciBEaW1vdiBsZWQgdXMgdG8gdGhlIGZ1bmN0aW9uCi0gICAgZGVjbGFyYXRvci1iYXNlZCBzeW50YXguPC9wYXJhPgotICA8L3NlY3Rpb24+Ci08L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL2RvYy9yZWZlcmVuY2UueG1sIGIvbGlicy9mdW5jdGlvbi9kb2MvcmVmZXJlbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjOTE0Yy4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL2RvYy9yZWZlcmVuY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0gICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgotICAKLSAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLSAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAgLS0+Ci08IURPQ1RZUEUgbGlicmFyeSBQVUJMSUMgIi0vL0Jvb3N0Ly9EVEQgQm9vc3RCb29rIFhNTCBWMS4wLy9FTiIKLSAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL3Rvb2xzL2Jvb3N0Ym9vay9kdGQvYm9vc3Rib29rLmR0ZCI+Ci0KLTxsaWJyYXJ5LXJlZmVyZW5jZSBpZD0iZnVuY3Rpb24ucmVmZXJlbmNlIiBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAxMy0wNi0xNSAwMDowNjoyNiAtMDcwMCAoU2F0LCAxNSBKdW4gMjAxMykgJCI+Ci0KLTxzZWN0aW9uIGlkPSJmdW5jdGlvbi5kZWZpbml0aW9ucyI+Ci0gIDx0aXRsZT5EZWZpbml0aW9uczwvdGl0bGU+Ci08cGFyYT4KLSAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT5BIGZ1bmN0aW9uIG9iamVjdCA8Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IGlzCi0gICAgICA8ZW1waGFzaXM+Y29tcGF0aWJsZTwvZW1waGFzaXM+IGlmIGZvciB0aGUgZ2l2ZW4gc2V0IG9mIGFyZ3VtZW50Ci0gICAgICB0eXBlcyA8Y29tcHV0ZXJvdXRwdXQ+QXJnMTwvY29tcHV0ZXJvdXRwdXQ+LAotICAgICAgPGNvbXB1dGVyb3V0cHV0PkFyZzI8L2NvbXB1dGVyb3V0cHV0PiwgLi4uLAotICAgICAgPGNvbXB1dGVyb3V0cHV0PkFyZ048L2NvbXB1dGVyb3V0cHV0PiBhbmQgYQotICAgICAgcmV0dXJuIHR5cGUgPGNvbXB1dGVyb3V0cHV0PlJlc3VsdFR5cGU8L2NvbXB1dGVyb3V0cHV0PiwgdGhlCi0gICAgICBhcHByb3ByaWF0ZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgd2VsbC1mb3JtZWQ6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci0gIDxlbXBoYXNpcz4vLyBpZiBSZXN1bHRUeXBlIGlzIG5vdCA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dm9pZDwvZW1waGFzaXM+PC9lbXBoYXNpcz4KLSAgUmVzdWx0VHlwZSBmb28oQXJnMSBhcmcxLCBBcmcyIGFyZzIsIC4uLiwgQXJnPGVtcGhhc2lzPk48L2VtcGhhc2lzPiBhcmc8ZW1waGFzaXM+TjwvZW1waGFzaXM+KQotICB7Ci0gICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJldHVybjwvZW1waGFzaXM+IGYoYXJnMSwgYXJnMiwgLi4uLCBhcmc8ZW1waGFzaXM+TjwvZW1waGFzaXM+KTsKLSAgfQotCi0gIDxlbXBoYXNpcz4vLyBpZiBSZXN1bHRUeXBlIGlzIDxlbXBoYXNpcyByb2xlPSJib2xkIj52b2lkPC9lbXBoYXNpcz48L2VtcGhhc2lzPgotICBSZXN1bHRUeXBlIGZvbyhBcmcxIGFyZzEsIEFyZzIgYXJnMiwgLi4uLCBBcmc8ZW1waGFzaXM+TjwvZW1waGFzaXM+IGFyZzxlbXBoYXNpcz5OPC9lbXBoYXNpcz4pCi0gIHsKLSAgICBmKGFyZzEsIGFyZzIsIC4uLiwgYXJnPGVtcGhhc2lzPk48L2VtcGhhc2lzPik7Ci0gIH0KLTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT4gQSBzcGVjaWFsIHByb3Zpc2lvbiBpcyBtYWRlIGZvciBwb2ludGVycyB0byBtZW1iZXIKLSAgICAgIGZ1bmN0aW9ucy4gVGhvdWdoIHRoZXkgYXJlIG5vdCBmdW5jdGlvbiBvYmplY3RzLCBCb29zdC5GdW5jdGlvbgotICAgICAgd2lsbCBhZGFwdCB0aGVtIGludGVybmFsbHkgdG8gZnVuY3Rpb24gb2JqZWN0cy4gVGhpcyByZXF1aXJlcwotICAgICAgdGhhdCBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIDxjb2RlPlIKLSAgICAgIChYOjoqbWYpKEFyZzEsIEFyZzIsIC4uLiwgQXJnTikKLSAgICAgIGN2LXF1YWxzPC9jb2RlPiBiZSBhZGFwdGVkIHRvIGEKLSAgICAgIGZ1bmN0aW9uIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCBvcGVyYXRvcgotICAgICAgb3ZlcmxvYWRzOgotPHByb2dyYW1saXN0aW5nPgotICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dGVtcGxhdGU8L2VtcGhhc2lzPiZsdDs8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dHlwZW5hbWUgUDwvZW1waGFzaXM+Jmd0OwotICBSIDxlbXBoYXNpcyByb2xlPSJib2xkIj5vcGVyYXRvcjwvZW1waGFzaXM+KCkoPGVtcGhhc2lzPmN2LXF1YWxzPC9lbXBoYXNpcz4gUCZhbXA7IHgsIEFyZzEgYXJnMSwgQXJnMiBhcmcyLCAuLi4sIEFyZzxlbXBoYXNpcz5OPC9lbXBoYXNpcz4gYXJnPGVtcGhhc2lzPk48L2VtcGhhc2lzPikgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPmNvbnN0PC9lbXBoYXNpcz4KLSAgewotICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXR1cm48L2VtcGhhc2lzPiAoKngpLiptZihhcmcxLCBhcmcyLCAuLi4sIGFyZzxlbXBoYXNpcz5OPC9lbXBoYXNpcz4pOwotICB9Ci08L3Byb2dyYW1saXN0aW5nPgotPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+QSBmdW5jdGlvbiBvYmplY3QgPGNvZGU+ZjwvY29kZT4gb2YKLSAgICAgIHR5cGUgPGNvZGU+RjwvY29kZT4gaXMKLSAgICAgIDxlbXBoYXNpcz5zdGF0ZWxlc3M8L2VtcGhhc2lzPiBpZiBpdCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgaWYKLSAgICAgIDxjb2RlPjxjbGFzc25hbWU+Ym9vc3Q6OmlzX3N0YXRlbGVzczwvY2xhc3NuYW1lPiZsdDtGJmd0OzwvY29kZT4KLSAgICAgIGlzIHRydWUuIFRoZSBjb25zdHJ1Y3Rpb24gb2Ygb3IgY29weSB0byBhIEJvb3N0LkZ1bmN0aW9uIG9iamVjdAotICAgICAgZnJvbSBhIHN0YXRlbGVzcyBmdW5jdGlvbiBvYmplY3Qgd2lsbCBub3QgY2F1c2UgZXhjZXB0aW9ucyB0byBiZQotICAgICAgdGhyb3duIGFuZCB3aWxsIG5vdCBhbGxvY2F0ZSBhbnkgc3RvcmFnZS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPGhlYWRlciBuYW1lPSJib29zdC9mdW5jdGlvbi5ocHAiPgotPG5hbWVzcGFjZSBuYW1lPSJib29zdCI+Ci0gIDxjbGFzcyBuYW1lPSJiYWRfZnVuY3Rpb25fY2FsbCI+Ci0gICAgPGluaGVyaXQgYWNjZXNzPSJwdWJsaWMiPjxjbGFzc25hbWU+c3RkOjpydW50aW1lX2Vycm9yPC9jbGFzc25hbWU+PC9pbmhlcml0PgotICAgIDxwdXJwb3NlPkFuIGV4Y2VwdGlvbiB0eXBlIHRocm93biB3aGVuIGFuIGluc3RhbmNlIG9mIGEgPGNvZGU+ZnVuY3Rpb248L2NvZGU+IG9iamVjdCBpcyBlbXB0eSB3aGVuIGludm9rZWQuPC9wdXJwb3NlPgotICAgIDxjb25zdHJ1Y3Rvcj4KLSAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPkNvbnN0cnVjdHMgYSA8Y29kZT48Y2xhc3NuYW1lPmJhZF9mdW5jdGlvbl9jYWxsPC9jbGFzc25hbWU+PC9jb2RlPiBleGNlcHRpb24gb2JqZWN0Ljwvc2ltcGFyYT48L2VmZmVjdHM+Ci0gICAgPC9jb25zdHJ1Y3Rvcj4KLSAgPC9jbGFzcz4KLQotICA8Y2xhc3MgbmFtZT0iZnVuY3Rpb25fYmFzZSI+Ci0gICAgPHB1cnBvc2U+VGhlIGNvbW1vbiBiYXNlIGNsYXNzIGZvciBhbGwgQm9vc3QuRnVuY3Rpb24KLSAgICBvYmplY3RzLiBPYmplY3RzIG9mIHR5cGUgZnVuY3Rpb25fYmFzZSBtYXkgbm90IGJlIGNyZWF0ZWQKLSAgICBkaXJlY3RseS48L3B1cnBvc2U+Ci0KLSAgICA8bWV0aG9kLWdyb3VwIG5hbWU9ImNhcGFjaXR5Ij4KLSAgICAgIDxtZXRob2QgbmFtZT0iZW1wdHkiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50aGlzPC9jb2RlPiBoYXMgYSB0YXJnZXQsIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L21ldGhvZD4KLSAgICA8L21ldGhvZC1ncm91cD4KLQotICAgIDxtZXRob2QtZ3JvdXAgbmFtZT0idGFyZ2V0IGFjY2VzcyI+Ci0gICAgICA8b3ZlcmxvYWRlZC1tZXRob2QgbmFtZT0idGFyZ2V0Ij4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+IAotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPkZ1bmN0b3IqPC90eXBlPgotICAgICAgICA8L3NpZ25hdHVyZT4KLSAgICAgICAgPHNpZ25hdHVyZSBjdj0iY29uc3QiPgotICAgICAgICAgIDx0ZW1wbGF0ZT4gCi0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Y29uc3QgRnVuY3Rvcio8L3R5cGU+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPklmIDxjb2RlPnRoaXM8L2NvZGU+IHN0b3JlcyBhIHRhcmdldCBvZiB0eXBlCi0gICAgICAgIDxjb2RlPkZ1bmN0b3I8L2NvZGU+LCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZQotICAgICAgICB0YXJnZXQuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgTlVMTAotICAgICAgICBwb2ludGVyLjwvc2ltcGFyYT48L3JldHVybnM+Ci0KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L292ZXJsb2FkZWQtbWV0aG9kPgotCi0gICAgICA8bWV0aG9kIG5hbWU9ImNvbnRhaW5zIiBjdj0iY29uc3QiPgotICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KLSAgICAgICAgICA8cGFyYW10eXBlPmNvbnN0IEZ1bmN0b3ImYW1wOzwvcGFyYW10eXBlPgotICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+dGFyZ2V0PC9tZXRob2RuYW1lPiZsdDtGdW5jdG9yJmd0OygpPC9jb2RlPiBpcyBub24tTlVMTCBhbmQgPGNvZGU+PGZ1bmN0aW9ubmFtZT5mdW5jdGlvbl9lcXVhbDwvZnVuY3Rpb25uYW1lPigqKHRoaXMtJmd0O3RhcmdldCZsdDtGdW5jdG9yJmd0OygpKSwgZik8L2NvZGU+PC9zaW1wYXJhPjwvcmV0dXJucz4KLSAKLSAgICAgIDwvbWV0aG9kPgotCi0gICAgICA8bWV0aG9kIG5hbWU9InRhcmdldF90eXBlIiBjdj0iY29uc3QiPgotICAgICAgICA8dHlwZT5jb25zdCBzdGQ6OnR5cGVfaW5mbyZhbXA7PC90eXBlPgotICAgICAgICA8cmV0dXJucz48c2ltcGFyYT48Y29kZT50eXBlaWQ8L2NvZGU+IG9mIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0LCBvciA8Y29kZT50eXBlaWQodm9pZCk8L2NvZGU+IGlmIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9yZXR1cm5zPgotICAgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93Ljwvc2ltcGFyYT48L3Rocm93cz4KLSAgICAgIDwvbWV0aG9kPgotICAgIDwvbWV0aG9kLWdyb3VwPgotICA8L2NsYXNzPgotCi0gIDxjbGFzcyBuYW1lPSJmdW5jdGlvbk4iPgotICAgIDx0ZW1wbGF0ZT4KLSAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJSIi8+Ci0gICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KLSAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgotICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgotICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+Ci0gICAgPC90ZW1wbGF0ZT4KLQotICAgIDxpbmhlcml0IGFjY2Vzcz0icHVibGljIj48Y2xhc3NuYW1lPmZ1bmN0aW9uX2Jhc2U8L2NsYXNzbmFtZT48L2luaGVyaXQ+Ci0KLSAgICA8cHVycG9zZT5BIHNldCBvZiBnZW5lcmFsaXplZCBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjYWxsYmFja3Mgb3Igd3JhcHBpbmcgZnVuY3Rpb24gb2JqZWN0cy48L3B1cnBvc2U+Ci0KLSAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICA8cGFyYT5DbGFzcyB0ZW1wbGF0ZSA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiBpcwotICAgICAgYWN0dWFsbHkgYSBmYW1pbHkgb2YgcmVsYXRlZCBjbGFzc2VzIDxjbGFzc25hbWUKLSAgICAgIGFsdD0iZnVuY3Rpb25OIj5mdW5jdGlvbjA8L2NsYXNzbmFtZT4sIDxjbGFzc25hbWUKLSAgICAgIGFsdD0iZnVuY3Rpb25OIj5mdW5jdGlvbjE8L2NsYXNzbmFtZT4sIGV0Yy4sIHVwIHRvIHNvbWUKLSAgICAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWF4aW11bS4gSW4gdGhpcyBjb250ZXh0LCA8Y29kZT5OPC9jb2RlPgotICAgICAgcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycy48L3BhcmE+Ci0gICAgPC9kZXNjcmlwdGlvbj4KLQotICAgIDx0eXBlZGVmIG5hbWU9InJlc3VsdF90eXBlIj48dHlwZT5SPC90eXBlPjwvdHlwZWRlZj4KLSAgICA8dHlwZWRlZiBuYW1lPSJhcmd1bWVudF90eXBlIj4KLSAgICAgIDx0eXBlPlQxPC90eXBlPjxwdXJwb3NlPklmIE4gPT0gMTwvcHVycG9zZT4KLSAgICA8L3R5cGVkZWY+Ci0gICAgPHR5cGVkZWYgbmFtZT0iZmlyc3RfYXJndW1lbnRfdHlwZSI+Ci0gICAgICA8dHlwZT5UMTwvdHlwZT4KLSAgICAgIDxwdXJwb3NlPklmIE4gPT0gMjwvcHVycG9zZT4KLSAgICA8L3R5cGVkZWY+Ci0gICAgPHR5cGVkZWYgbmFtZT0ic2Vjb25kX2FyZ3VtZW50X3R5cGUiPgotICAgICAgPHR5cGU+VDI8L3R5cGU+Ci0gICAgICA8cHVycG9zZT5JZiBOID09IDI8L3B1cnBvc2U+Ci0gICAgPC90eXBlZGVmPgotICAgIDx0eXBlZGVmIG5hbWU9ImFyZzFfdHlwZSI+PHR5cGU+VDE8L3R5cGU+PC90eXBlZGVmPgotICAgIDx0eXBlZGVmIG5hbWU9ImFyZzJfdHlwZSI+PHR5cGU+VDI8L3R5cGU+PC90eXBlZGVmPgotICAgIDx0eXBlZGVmIG5hbWU9Ii4uLiI+PHR5cGUvPjwvdHlwZWRlZj4KLSAgICA8dHlwZWRlZiBuYW1lPSJhcmdOX3R5cGUiPjx0eXBlPlROPC90eXBlPjwvdHlwZWRlZj4KLQotICAgIDxzdGF0aWMtY29uc3RhbnQgbmFtZT0iYXJpdHkiPgotICAgICAgPHR5cGU+aW50PC90eXBlPgotICAgICAgPGRlZmF1bHQ+TjwvZGVmYXVsdD4KLSAgICA8L3N0YXRpYy1jb25zdGFudD4KLQotICAgIDxzdHJ1Y3QgbmFtZT0ic2lnIj4KLSAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkFyZ3MiLz4KLSAgICAgIDwvdGVtcGxhdGU+Ci0KLSAgICAgIDxwdXJwb3NlPgotICAgICAgICA8c2ltcGFyYT48bGlicmFyeW5hbWU+TGFtYmRhPC9saWJyYXJ5bmFtZT4gbGlicmFyeSBzdXBwb3J0PC9zaW1wYXJhPgotICAgICAgPC9wdXJwb3NlPgotCi0gICAgICA8dHlwZWRlZiBuYW1lPSJ0eXBlIj48dHlwZT5yZXN1bHRfdHlwZTwvdHlwZT48L3R5cGVkZWY+Ci0gICAgPC9zdHJ1Y3Q+Ci0KLSAgICA8Y29uc3RydWN0b3I+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+PC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93Ljwvc2ltcGFyYT48L3Rocm93cz4KLSAgICA8L2NvbnN0cnVjdG9yPgotCi0gICAgPGNvbnN0cnVjdG9yPgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KLSAgICAgICAgPHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7PC9wYXJhbXR5cGU+Ci0gICAgICA8L3BhcmFtZXRlcj4KLSAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Db250YWlucyBhIGNvcHkgb2YgdGhlIDxjb2RlPmY8L2NvZGU+J3MgdGFyZ2V0LCBpZiBpdCBoYXMgb25lLCBvciBpcyBlbXB0eSBpZiA8Y29kZT5mLjxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgIDwvY29uc3RydWN0b3I+Ci0KLSAgICA8Y29uc3RydWN0b3I+Ci0gICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgotICAgICAgICA8cGFyYW10eXBlPjxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+JmFtcDsmYW1wOzwvcGFyYW10eXBlPgotICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICA8cmVxdWlyZXM+PHNpbXBhcmE+QysrMTEgY29tcGF0aWJsZSBjb21waWxlci48L3NpbXBhcmE+PC9yZXF1aXJlcz4KLSAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Nb3ZlcyB0aGUgdmFsdWUgZnJvbSA8Y29kZT5mPC9jb2RlPiB0byA8Y29kZT4qdGhpczwvY29kZT4uIElmIHRoZSBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIGl0cyBidWZmZXIgd2lsbCBiZSBhc3NpZ25lZCB0byA8Y29kZT4qdGhpczwvY29kZT4gbGVhdmluZyBhcmd1bWVudCBlbXB0eS48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGFyZ3VtZW50IGhhcyBpdHMgZnVuY3Rpb24gb2JqZWN0IGFsbG9jYXRlZCBub3Qgb24gdGhlIGhlYXAgYW5kIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgIDwvY29uc3RydWN0b3I+Ci0gICAgCi0gICAgPGNvbnN0cnVjdG9yPgotICAgICAgPHRlbXBsYXRlPgotICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRiIvPgotICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5GPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICA8cmVxdWlyZXM+PHNpbXBhcmE+RiBpcyBhIGZ1bmN0aW9uIG9iamVjdCBDYWxsYWJsZSBmcm9tIDxjb2RlPnRoaXM8L2NvZGU+Ljwvc2ltcGFyYT48L3JlcXVpcmVzPgotICAgICAgPHBvc3Rjb25kaXRpb25zPjxzaW1wYXJhPjxjb2RlPip0aGlzPC9jb2RlPiB0YXJnZXRzIGEgY29weSBvZiA8Y29kZT5mPC9jb2RlPiBpZiA8Y29kZT5mPC9jb2RlPiBpcyBub25lbXB0eSwgb3IgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+IGlmIDxjb2RlPmY8L2NvZGU+IGlzIGVtcHR5Ljwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgotICAgIDwvY29uc3RydWN0b3I+Ci0KLSAgICA8Y29uc3RydWN0b3I+Ci0gICAgICA8dGVtcGxhdGU+Ci0gICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGIi8+Ci0gICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBbGxvY2F0b3IiLz4KLSAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+RjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJhbGxvYyI+PHBhcmFtdHlwZT5BbGxvY2F0b3I8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgIDxyZXF1aXJlcz48c2ltcGFyYT5GIGlzIGEgZnVuY3Rpb24gb2JqZWN0IENhbGxhYmxlIGZyb20gPGNvZGU+dGhpczwvY29kZT4sIEFsbG9jYXRvciBpcyBhbiBhbGxvY2F0b3IuIFRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIG9mIEFsbG9jYXRvciBzaGFsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvcmVxdWlyZXM+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+KnRoaXM8L2NvZGU+IHRhcmdldHMgYSBjb3B5IG9mIDxjb2RlPmY8L2NvZGU+IGlmIDxjb2RlPmY8L2NvZGU+IGlzIG5vbmVtcHR5LCBvciA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4gaWYgPGNvZGU+ZjwvY29kZT4gaXMgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0KLSAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPklmIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHJlcXVpcmVkLCB0aGUgZ2l2ZW4gYWxsb2NhdG9yIChvciBhIGNvcHkgb2YgaXQpIHdpbGwgYmUgdXNlZCB0byBhbGxvY2F0ZSB0aGF0IG1lbW9yeS48L3NpbXBhcmE+PC9lZmZlY3RzPgotICAgIDwvY29uc3RydWN0b3I+Ci0KLSAgICA8ZGVzdHJ1Y3Rvcj4KLSAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPklmIDxjb2RlPiF0aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4sIGRlc3Ryb3lzIHRoZSB0YXJnZXQgb2YgdGhpcy48L3NpbXBhcmE+PC9lZmZlY3RzPgotCi0gICAgPC9kZXN0cnVjdG9yPgotCi0gICAgPGNvcHktYXNzaWdubWVudD4KLSAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+Ci0gICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPgotICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+SWYgY29weSBjb25zdHJ1Y3Rpb24gZG9lcyBub3QgdGhyb3csIDxjb2RlPip0aGlzPC9jb2RlPiB0YXJnZXRzIGEgY29weSBvZiA8Y29kZT5mPC9jb2RlPidzIHRhcmdldCwgaWYgaXQgaGFzIG9uZSwgb3IgaXMgZW1wdHkgaWYgPGNvZGU+Zi48bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4uIElmIGNvcHkgY29uc3RydWN0aW9uIGRvZXMgdGhyb3csIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICA8L2NvcHktYXNzaWdubWVudD4KLSAgICAKLSAgICA8Y29weS1hc3NpZ25tZW50PgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KLSAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7JmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkMrKzExIGNvbXBhdGlibGUgY29tcGlsZXIuPC9zaW1wYXJhPjwvcmVxdWlyZXM+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+TW92ZXMgdGhlIHZhbHVlIGZyb20gPGNvZGU+ZjwvY29kZT4gdG8gPGNvZGU+KnRoaXM8L2NvZGU+LiBJZiB0aGUgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCBpdHMgYnVmZmVyIHdpbGwgYmUgYXNzaWduZWQgdG8gPGNvZGU+KnRoaXM8L2NvZGU+IGxlYXZpbmcgYXJndW1lbnQgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHVubGVzcyBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgbm90IG9uIHRoZSBoZWFwIGFuZCBjb3B5aW5nIHRoZSB0YXJnZXQgb2YgPGNvZGU+ZjwvY29kZT4gdGhyb3dzLjwvc2ltcGFyYT48L3Rocm93cz4KLSAgICA8L2NvcHktYXNzaWdubWVudD4KLQotICAgIDxtZXRob2QtZ3JvdXAgbmFtZT0ibW9kaWZpZXJzIj4KLSAgICAgIDxtZXRob2QgbmFtZT0ic3dhcCI+Ci0gICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+Ci0gICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPkludGVyY2hhbmdlcyB0aGUgdGFyZ2V0cyBvZiA8Y29kZT4qdGhpczwvY29kZT4gYW5kIDxjb2RlPmY8L2NvZGU+Ljwvc2ltcGFyYT48L2VmZmVjdHM+Ci0gICAgICA8L21ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJjbGVhciI+Ci0gICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+Ci0gICAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgotICAgICAgPC9tZXRob2Q+Ci0gICAgPC9tZXRob2QtZ3JvdXA+Ci0KLSAgICA8bWV0aG9kLWdyb3VwIG5hbWU9ImNhcGFjaXR5Ij4KLSAgICAgIDxtZXRob2QgbmFtZT0iZW1wdHkiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50aGlzPC9jb2RlPiBoYXMgYSB0YXJnZXQsIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L21ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJjb252ZXJzaW9uLW9wZXJhdG9yIiBjdj0iY29uc3QiPgotICAgICAgICA8dHlwZT5zYWZlX2Jvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPkEgPGNvZGU+c2FmZV9ib29sPC9jb2RlPiB0aGF0IGV2YWx1YXRlcyA8Y29kZT5mYWxzZTwvY29kZT4gaW4gYSBib29sZWFuIGNvbnRleHQgd2hlbiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4sIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L21ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvciEiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPjwvc2ltcGFyYT48L3JldHVybnM+Ci0gICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgICAgPC9tZXRob2Q+Ci0gICAgPC9tZXRob2QtZ3JvdXA+Ci0KLSAgICA8bWV0aG9kLWdyb3VwIG5hbWU9InRhcmdldCBhY2Nlc3MiPgotICAgICAgPG92ZXJsb2FkZWQtbWV0aG9kIG5hbWU9InRhcmdldCI+Ci0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPiAKLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5GdW5jdG9yKjwvdHlwZT4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0gICAgICAgIDxzaWduYXR1cmUgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dGVtcGxhdGU+IAotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPmNvbnN0IEZ1bmN0b3IqPC90eXBlPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5JZiA8Y29kZT50aGlzPC9jb2RlPiBzdG9yZXMgYSB0YXJnZXQgb2YgdHlwZQotICAgICAgICA8Y29kZT5GdW5jdG9yPC9jb2RlPiwgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUKLSAgICAgICAgdGFyZ2V0LiBPdGhlcndpc2UsIHJldHVybnMgdGhlIE5VTEwKLSAgICAgICAgcG9pbnRlci48L3NpbXBhcmE+PC9yZXR1cm5zPgotCi0gICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgICAgPC9vdmVybG9hZGVkLW1ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJjb250YWlucyIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+Ci0gICAgICAgICAgPHBhcmFtdHlwZT5jb25zdCBGdW5jdG9yJmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnRydWU8L2NvZGU+IGlmIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPnRhcmdldDwvbWV0aG9kbmFtZT4mbHQ7RnVuY3RvciZndDsoKTwvY29kZT4gaXMgbm9uLU5VTEwgYW5kIDxjb2RlPjxmdW5jdGlvbm5hbWU+ZnVuY3Rpb25fZXF1YWw8L2Z1bmN0aW9ubmFtZT4oKih0aGlzLSZndDt0YXJnZXQmbHQ7RnVuY3RvciZndDsoKSksIGYpPC9jb2RlPjwvc2ltcGFyYT48L3JldHVybnM+Ci0gCi0gICAgICA8L21ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJ0YXJnZXRfdHlwZSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgPHR5cGU+Y29uc3Qgc3RkOjp0eXBlX2luZm8mYW1wOzwvdHlwZT4KLSAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+PGNvZGU+dHlwZWlkPC9jb2RlPiBvZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdCwgb3IgPGNvZGU+dHlwZWlkKHZvaWQpPC9jb2RlPiBpZiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4uPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L21ldGhvZD4KLQotICAgIDwvbWV0aG9kLWdyb3VwPgotCi0gICAgPG1ldGhvZC1ncm91cCBuYW1lPSJpbnZvY2F0aW9uIj4KLSAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgPHR5cGU+cmVzdWx0X3R5cGU8L3R5cGU+Ci0gICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iYTEiPjxwYXJhbXR5cGU+YXJnMV90eXBlPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iYTIiPjxwYXJhbXR5cGU+YXJnMl90eXBlPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxwYXJhbWV0ZXI+PHBhcmFtdHlwZT4uLi48L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJhTiI+PHBhcmFtdHlwZT5hcmdOX3R5cGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPGVmZmVjdHM+PHNpbXBhcmE+PGNvZGU+ZihhMSwgYTIsIC4uLiwgYU4pPC9jb2RlPiwgd2hlcmUgPGNvZGU+ZjwvY29kZT4gaXMgdGhlIHRhcmdldCBvZiA8Y29kZT4qdGhpczwvY29kZT4uPC9zaW1wYXJhPjwvZWZmZWN0cz4KLSAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+aWYgPGNvZGU+UjwvY29kZT4gaXMgPGNvZGU+dm9pZDwvY29kZT4sIG5vdGhpbmcgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbCB0byA8Y29kZT5mPC9jb2RlPiBpcyByZXR1cm5lZC48L3NpbXBhcmE+PC9yZXR1cm5zPgotICAgICAgICA8dGhyb3dzPjxzaW1wYXJhPjxjb2RlPjxjbGFzc25hbWU+YmFkX2Z1bmN0aW9uX2NhbGw8L2NsYXNzbmFtZT48L2NvZGU+IGlmIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi4gT3RoZXJ3aXNlLCBtYXkgdGhyb3VnaCBhbnkgZXhjZXB0aW9uIHRocm93biBieSB0aGUgdGFyZ2V0IGZ1bmN0aW9uIDxjb2RlPmY8L2NvZGU+Ljwvc2ltcGFyYT48L3Rocm93cz4KLSAgICAgIDwvbWV0aG9kPgotICAgIDwvbWV0aG9kLWdyb3VwPgotCi0gICAgPGZyZWUtZnVuY3Rpb24tZ3JvdXAgbmFtZT0ic3BlY2lhbGl6ZWQgYWxnb3JpdGhtcyI+Ci0gICAgICA8ZnVuY3Rpb24gbmFtZT0ic3dhcCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KLSAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KLSAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+Ci0gICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+Ci0gICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+Ci0gICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjEiPjxwYXJhbXR5cGU+PGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjIiPjxwYXJhbXR5cGU+PGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPjxjb2RlPmYxLjxtZXRob2RuYW1lPnN3YXA8L21ldGhvZG5hbWU+KGYyKTwvY29kZT48L3NpbXBhcmE+PC9lZmZlY3RzPgotICAgICAgPC9mdW5jdGlvbj4KLSAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+Ci0KLSAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJjb21wYXJpc29uIG9wZXJhdG9ycyI+Ci0gICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJvcGVyYXRvcj09Ij4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPkZ1bmN0b3I8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPkZ1bmN0b3I8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1QxLCBUMiwgLi4uLCBUTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMSIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQyIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVE4iLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1QxLCBUMiwgLi4uLCBUTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4gICAgICAgIAotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMSIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQyIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVE4iLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJVMSIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlUyIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVU4iLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMSI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZsdDtUMSwgVDIsIC4uLiwgVE4mZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYyIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1UxLCBVMiwgLi4uLCBVTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5UcnVlIHdoZW4gPGNvZGU+ZjwvY29kZT4gc3RvcmVzIGFuIG9iamVjdCBvZgotICAgICAgICB0eXBlIDxjb2RlPkZ1bmN0b3I8L2NvZGU+IGFuZCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGxpZXM6Ci0gICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLQotICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxjb2RlPmc8L2NvZGU+IGlzIG9mIHR5cGUKLSAgICAgICAgICAgIDxjb2RlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L2NvZGU+Ci0gICAgICAgICAgICBhbmQgPGNvZGU+Zi50YXJnZXQmbHQ7RnVuY3RvciZndDsoKSA9PSBnLjxtZXRob2RuYW1lCi0gICAgICAgICAgICBhbHQ9InJlZmVyZW5jZV93cmFwcGVyOjpnZXRfcG9pbnRlciI+Z2V0X3BvaW50ZXI8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L2xpc3RpdGVtPgotCi0gICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+PGNvZGU+ZzwvY29kZT4gaXMgbm90IG9mIHR5cGUKLSAgICAgICAgICAgIDxjb2RlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L2NvZGU+Ci0gICAgICAgICAgICBhbmQKLSAgICAgICAgICAgIDxjb2RlPjxmdW5jdGlvbm5hbWU+ZnVuY3Rpb25fZXF1YWw8L2Z1bmN0aW9ubmFtZT4oKihmLnRhcmdldCZsdDtGdW5jdG9yJmd0OygpKSwKLSAgICAgICAgICAgIGcpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KLQotICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgIDwvc2ltcGFyYT48L3JldHVybnM+Ci0KLSAgICAgICAgPG5vdGVzPjxzaW1wYXJhPjxjb2RlPjxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+PC9jb2RlPgotICAgICAgICBvYmplY3RzIGFyZSBub3QKLSAgICAgICAgPGNvbmNlcHRuYW1lPkVxdWFsaXR5Q29tcGFyYWJsZTwvY29uY2VwdG5hbWU+Ljwvc2ltcGFyYT48L25vdGVzPgotCi0gICAgICAgIDxyYXRpb25hbGU+PHNpbXBhcmE+VGhlIDxjb2RlPnNhZmVfYm9vbDwvY29kZT4gY29udmVyc2lvbgotICAgICAgICBvcGVucyBhIGxvb3Bob2xlIHdoZXJlYnkgdHdvIDxjb2RlPmZ1bmN0aW9uTjwvY29kZT4KLSAgICAgICAgaW5zdGFuY2VzIGNhbiBiZSBjb21wYXJlZCB2aWEgPGNvZGU+PT08L2NvZGU+LCBhbHRob3VnaCB0aGlzCi0gICAgICAgIGlzIG5vdCBmZWFzaWJsZSB0byBpbXBsZW1lbnQuIFRoZSB1bmRlZmluZWQgPGNvZGU+dm9pZAotICAgICAgICBvcGVyYXRvcj09PC9jb2RlPiBjbG9zZXMgdGhlIGxvb3Bob2xlIGFuZCBlbnN1cmVzIGEKLSAgICAgICAgY29tcGlsZS10aW1lIG9yIGxpbmstdGltZSBlcnJvci48L3NpbXBhcmE+PC9yYXRpb25hbGU+Ci0gICAgICA8L292ZXJsb2FkZWQtZnVuY3Rpb24+Ci0KLSAgICAgIDxvdmVybG9hZGVkLWZ1bmN0aW9uIG5hbWU9Im9wZXJhdG9yIT0iPgotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMSIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQyIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVE4iLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZsdDtUMSwgVDIsIC4uLiwgVE4mZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZsdDtUMSwgVDIsIC4uLiwgVE4mZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+ICAgICAgICAKLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlUxIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVTIiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJVTiIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYxIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1QxLCBUMiwgLi4uLCBUTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjIiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VTEsIFUyLCAuLi4sIFVOJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPlRydWUgd2hlbiA8Y29kZT5mPC9jb2RlPiBkb2VzIG5vdCBzdG9yZSBhbgotICAgICAgICBvYmplY3Qgb2YgdHlwZSA8Y29kZT5GdW5jdG9yPC9jb2RlPiBvciBpdCBzdG9yZXMgYW4gb2JqZWN0IG9mCi0gICAgICAgIHR5cGUgPGNvZGU+RnVuY3RvcjwvY29kZT4gYW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICAgICAgYXBwbGllczoKLSAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotCi0gICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+PGNvZGU+ZzwvY29kZT4gaXMgb2YgdHlwZQotICAgICAgICAgICAgPGNvZGU+PGNsYXNzbmFtZT5yZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPiZsdDtGdW5jdG9yJmd0OzwvY29kZT4KLSAgICAgICAgICAgIGFuZCA8Y29kZT5mLnRhcmdldCZsdDtGdW5jdG9yJmd0OygpICE9IGcuPG1ldGhvZG5hbWUKLSAgICAgICAgICAgIGFsdD0icmVmZXJlbmNlX3dyYXBwZXI6OmdldF9wb2ludGVyIj5nZXRfcG9pbnRlcjwvbWV0aG9kbmFtZT4oKTwvY29kZT4uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT48Y29kZT5nPC9jb2RlPiBpcyBub3Qgb2YgdHlwZQotICAgICAgICAgICAgPGNvZGU+PGNsYXNzbmFtZT5yZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPiZsdDtGdW5jdG9yJmd0OzwvY29kZT4KLSAgICAgICAgICAgIGFuZCA8Y29kZT4hPGZ1bmN0aW9ubmFtZT5mdW5jdGlvbl9lcXVhbDwvZnVuY3Rpb25uYW1lPigqKGYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkpLCBnKTwvY29kZT4uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICA8L3NpbXBhcmE+PC9yZXR1cm5zPgotCi0gICAgICAgIDxub3Rlcz48c2ltcGFyYT48Y29kZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPjwvY29kZT4KLSAgICAgICAgb2JqZWN0cyBhcmUgbm90Ci0gICAgICAgIDxjb25jZXB0bmFtZT5FcXVhbGl0eUNvbXBhcmFibGU8L2NvbmNlcHRuYW1lPi48L3NpbXBhcmE+PC9ub3Rlcz4KLQotICAgICAgICA8cmF0aW9uYWxlPjxzaW1wYXJhPlRoZSA8Y29kZT5zYWZlX2Jvb2w8L2NvZGU+IGNvbnZlcnNpb24KLSAgICAgICAgb3BlbnMgYSBsb29waG9sZSB3aGVyZWJ5IHR3byA8Y29kZT5mdW5jdGlvbk48L2NvZGU+Ci0gICAgICAgIGluc3RhbmNlcyBjYW4gYmUgY29tcGFyZWQgdmlhIDxjb2RlPiE9PC9jb2RlPiwgYWx0aG91Z2ggdGhpcwotICAgICAgICBpcyBub3QgZmVhc2libGUgdG8gaW1wbGVtZW50LiBUaGUgdW5kZWZpbmVkIDxjb2RlPnZvaWQKLSAgICAgICAgb3BlcmF0b3IhPTwvY29kZT4gY2xvc2VzIHRoZSBsb29waG9sZSBhbmQgZW5zdXJlcyBhCi0gICAgICAgIGNvbXBpbGUtdGltZSBvciBsaW5rLXRpbWUgZXJyb3IuPC9zaW1wYXJhPjwvcmF0aW9uYWxlPgotICAgICAgPC9vdmVybG9hZGVkLWZ1bmN0aW9uPgotICAgIDwvZnJlZS1mdW5jdGlvbi1ncm91cD4KLSAgPC9jbGFzcz4KLQotICA8Y2xhc3MgbmFtZT0iZnVuY3Rpb24iPgotICAgIDx0ZW1wbGF0ZT4KLSAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiPgotICAgICAgICA8cHVycG9zZT5GdW5jdGlvbiB0eXBlIFIgKFQxLCBUMiwgLi4uLCBUTik8L3B1cnBvc2U+Ci0gICAgICA8L3RlbXBsYXRlLXR5cGUtcGFyYW1ldGVyPgotICAgIDwvdGVtcGxhdGU+Ci0gICAgPGluaGVyaXQgYWNjZXNzPSJwdWJsaWMiPjxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1IsIFQxLCBUMiwgLi4uLCBUTiZndDs8L2luaGVyaXQ+Ci0KLSAgICA8cHVycG9zZT5BIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IKLSAgICBjYWxsYmFja3Mgb3Igd3JhcHBpbmcgZnVuY3Rpb24gb2JqZWN0cy48L3B1cnBvc2U+Ci0KLSAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICA8cGFyYT5DbGFzcyB0ZW1wbGF0ZSA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+IGlzIGEgdGhpbgotICAgICAgd3JhcHBlciBhcm91bmQgdGhlIG51bWJlcmVkIGNsYXNzIHRlbXBsYXRlcyA8Y2xhc3NuYW1lCi0gICAgICBhbHQ9ImZ1bmN0aW9uTiI+ZnVuY3Rpb24wPC9jbGFzc25hbWU+LCA8Y2xhc3NuYW1lCi0gICAgICBhbHQ9ImZ1bmN0aW9uTiI+ZnVuY3Rpb24xPC9jbGFzc25hbWU+LCBldGMuIEl0IGFjY2VwdHMgYQotICAgICAgZnVuY3Rpb24gdHlwZSB3aXRoIE4gYXJndW1lbnRzIGFuZCB3aWxsIHdpbGwgZGVyaXZlIGZyb20KLSAgICAgIDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+IGluc3RhbnRpYXRlZCB3aXRoIHRoZSBhcmd1bWVudHMKLSAgICAgIGl0IHJlY2VpdmVzLjwvcGFyYT4KLQotICAgICAgPHBhcmE+VGhlIHNlbWFudGljcyBvZiBhbGwgb3BlcmF0aW9ucyBpbiBjbGFzcyB0ZW1wbGF0ZQotICAgICAgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiBhcmUgZXF1aXZhbGVudCB0byB0aGF0IG9mIHRoZQotICAgICAgdW5kZXJseWluZyA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiBvYmplY3QsIGFsdGhvdWdoCi0gICAgICBhZGRpdGlvbmFsIG1lbWJlciBmdW5jdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGFsbG93IHByb3BlciBjb3B5Ci0gICAgICBjb25zdHJ1Y3Rpb24gYW5kIGNvcHkgYXNzaWdubWVudCBvZiBmdW5jdGlvbiBvYmplY3RzLjwvcGFyYT4KLSAgICA8L2Rlc2NyaXB0aW9uPgotCi0gICAgPHR5cGVkZWYgbmFtZT0icmVzdWx0X3R5cGUiPjx0eXBlPlI8L3R5cGU+PC90eXBlZGVmPgotICAgIDx0eXBlZGVmIG5hbWU9ImFyZ3VtZW50X3R5cGUiPgotICAgICAgPHR5cGU+VDE8L3R5cGU+PHB1cnBvc2U+SWYgTiA9PSAxPC9wdXJwb3NlPgotICAgIDwvdHlwZWRlZj4KLSAgICA8dHlwZWRlZiBuYW1lPSJmaXJzdF9hcmd1bWVudF90eXBlIj4KLSAgICAgIDx0eXBlPlQxPC90eXBlPgotICAgICAgPHB1cnBvc2U+SWYgTiA9PSAyPC9wdXJwb3NlPgotICAgIDwvdHlwZWRlZj4KLSAgICA8dHlwZWRlZiBuYW1lPSJzZWNvbmRfYXJndW1lbnRfdHlwZSI+Ci0gICAgICA8dHlwZT5UMjwvdHlwZT4KLSAgICAgIDxwdXJwb3NlPklmIE4gPT0gMjwvcHVycG9zZT4KLSAgICA8L3R5cGVkZWY+Ci0gICAgPHR5cGVkZWYgbmFtZT0iYXJnMV90eXBlIj48dHlwZT5UMTwvdHlwZT48L3R5cGVkZWY+Ci0gICAgPHR5cGVkZWYgbmFtZT0iYXJnMl90eXBlIj48dHlwZT5UMjwvdHlwZT48L3R5cGVkZWY+Ci0gICAgPHR5cGVkZWYgbmFtZT0iLi4uIj48dHlwZS8+PC90eXBlZGVmPgotICAgIDx0eXBlZGVmIG5hbWU9ImFyZ05fdHlwZSI+PHR5cGU+VE48L3R5cGU+PC90eXBlZGVmPgotCi0gICAgPHN0YXRpYy1jb25zdGFudCBuYW1lPSJhcml0eSI+Ci0gICAgICA8dHlwZT5pbnQ8L3R5cGU+Ci0gICAgICA8ZGVmYXVsdD5OPC9kZWZhdWx0PgotICAgIDwvc3RhdGljLWNvbnN0YW50PgotCi0gICAgPHN0cnVjdCBuYW1lPSJzaWciPgotICAgICAgPHRlbXBsYXRlPgotICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQXJncyIvPgotICAgICAgPC90ZW1wbGF0ZT4KLQotICAgICAgPHB1cnBvc2U+Ci0gICAgICAgIDxzaW1wYXJhPjxsaWJyYXJ5bmFtZT5MYW1iZGE8L2xpYnJhcnluYW1lPiBsaWJyYXJ5IHN1cHBvcnQ8L3NpbXBhcmE+Ci0gICAgICA8L3B1cnBvc2U+Ci0KLSAgICAgIDx0eXBlZGVmIG5hbWU9InR5cGUiPjx0eXBlPnJlc3VsdF90eXBlPC90eXBlPjwvdHlwZWRlZj4KLSAgICA8L3N0cnVjdD4KLQotICAgIDxjb25zdHJ1Y3Rvcj4KLSAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT48Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgIDwvY29uc3RydWN0b3I+Ci0KLSAgICA8Y29uc3RydWN0b3I+Ci0gICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgotICAgICAgICA8cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+JmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgPHBvc3Rjb25kaXRpb25zPjxzaW1wYXJhPkNvbnRhaW5zIGEgY29weSBvZiB0aGUgPGNvZGU+ZjwvY29kZT4ncyB0YXJnZXQsIGlmIGl0IGhhcyBvbmUsIG9yIGlzIGVtcHR5IGlmIDxjb2RlPmYuPG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgotICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdyB1bmxlc3MgY29weWluZyB0aGUgdGFyZ2V0IG9mIDxjb2RlPmY8L2NvZGU+IHRocm93cy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgPC9jb25zdHJ1Y3Rvcj4KLSAgICAgICAgCi0gICAgPGNvbnN0cnVjdG9yPgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KLSAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7JmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkMrKzExIGNvbXBhdGlibGUgY29tcGlsZXIuPC9zaW1wYXJhPjwvcmVxdWlyZXM+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+TW92ZXMgdGhlIHZhbHVlIGZyb20gPGNvZGU+ZjwvY29kZT4gdG8gPGNvZGU+KnRoaXM8L2NvZGU+LiBJZiB0aGUgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCBpdHMgYnVmZmVyIHdpbGwgYmUgYXNzaWduZWQgdG8gPGNvZGU+KnRoaXM8L2NvZGU+IGxlYXZpbmcgYXJndW1lbnQgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHVubGVzcyBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgbm90IG9uIHRoZSBoZWFwIGFuZCBjb3B5aW5nIHRoZSB0YXJnZXQgb2YgPGNvZGU+ZjwvY29kZT4gdGhyb3dzLjwvc2ltcGFyYT48L3Rocm93cz4KLSAgICA8L2NvbnN0cnVjdG9yPgotICAgIAotICAgIDxjb25zdHJ1Y3Rvcj4KLSAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+Ci0gICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZhbXA7PC9wYXJhbXR5cGU+Ci0gICAgICA8L3BhcmFtZXRlcj4KLSAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Db250YWlucyBhIGNvcHkgb2YgdGhlIDxjb2RlPmY8L2NvZGU+J3MgdGFyZ2V0LCBpZiBpdCBoYXMgb25lLCBvciBpcyBlbXB0eSBpZiA8Y29kZT5mLjxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgIDwvY29uc3RydWN0b3I+Ci0KLSAgICA8Y29uc3RydWN0b3I+Ci0gICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgotICAgICAgICA8cGFyYW10eXBlPjxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mYW1wOyZhbXA7PC9wYXJhbXR5cGU+Ci0gICAgICA8L3BhcmFtZXRlcj4KLSAgICAgIDxyZXF1aXJlcz48c2ltcGFyYT5DKysxMSBjb21wYXRpYmxlIGNvbXBpbGVyLjwvc2ltcGFyYT48L3JlcXVpcmVzPgotICAgICAgPHBvc3Rjb25kaXRpb25zPjxzaW1wYXJhPk1vdmVzIHRoZSB2YWx1ZSBmcm9tIDxjb2RlPmY8L2NvZGU+IHRvIDxjb2RlPip0aGlzPC9jb2RlPi4gSWYgdGhlIGFyZ3VtZW50IGhhcyBpdHMgZnVuY3Rpb24gb2JqZWN0IGFsbG9jYXRlZCBvbiB0aGUgaGVhcCwgaXRzIGJ1ZmZlciB3aWxsIGJlIGFzc2lnbmVkIHRvIDxjb2RlPip0aGlzPC9jb2RlPiBsZWF2aW5nIGFyZ3VtZW50IGVtcHR5Ljwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgotICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdyB1bmxlc3MgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG5vdCBvbiB0aGUgaGVhcCBhbmQgY29weWluZyB0aGUgdGFyZ2V0IG9mIDxjb2RlPmY8L2NvZGU+IHRocm93cy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgPC9jb25zdHJ1Y3Rvcj4KLSAgICAKLSAgICA8Y29uc3RydWN0b3I+Ci0gICAgICA8dGVtcGxhdGU+Ci0gICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGIi8+Ci0gICAgICA8L3RlbXBsYXRlPgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPkY8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgIDxyZXF1aXJlcz48c2ltcGFyYT5GIGlzIGEgZnVuY3Rpb24gb2JqZWN0IENhbGxhYmxlIGZyb20gPGNvZGU+dGhpczwvY29kZT4uPC9zaW1wYXJhPjwvcmVxdWlyZXM+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+KnRoaXM8L2NvZGU+IHRhcmdldHMgYSBjb3B5IG9mIDxjb2RlPmY8L2NvZGU+IGlmIDxjb2RlPmY8L2NvZGU+IGlzIG5vbmVtcHR5LCBvciA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4gaWYgPGNvZGU+ZjwvY29kZT4gaXMgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgPC9jb25zdHJ1Y3Rvcj4KLQotICAgIDxjb25zdHJ1Y3Rvcj4KLSAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkYiLz4KLSAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkFsbG9jYXRvciIvPgotICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5GPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICA8cGFyYW1ldGVyIG5hbWU9ImFsbG9jIj48cGFyYW10eXBlPkFsbG9jYXRvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkYgaXMgYSBmdW5jdGlvbiBvYmplY3QgQ2FsbGFibGUgZnJvbSA8Y29kZT50aGlzPC9jb2RlPiwgQWxsb2NhdG9yIGlzIGFuIGFsbG9jYXRvci4gVGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3Igb2YgQWxsb2NhdG9yIHNoYWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC9yZXF1aXJlcz4KLSAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT48Y29kZT4qdGhpczwvY29kZT4gdGFyZ2V0cyBhIGNvcHkgb2YgPGNvZGU+ZjwvY29kZT4gaWYgPGNvZGU+ZjwvY29kZT4gaXMgbm9uZW1wdHksIG9yIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPiBpZiA8Y29kZT5mPC9jb2RlPiBpcyBlbXB0eS48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLQotICAgICAgPGVmZmVjdHM+PHNpbXBhcmE+SWYgbWVtb3J5IGFsbG9jYXRpb24gaXMgcmVxdWlyZWQsIHRoZSBnaXZlbiBhbGxvY2F0b3IgKG9yIGEgY29weSBvZiBpdCkgd2lsbCBiZSB1c2VkIHRvIGFsbG9jYXRlIHRoYXQgbWVtb3J5Ljwvc2ltcGFyYT48L2VmZmVjdHM+Ci0gICAgPC9jb25zdHJ1Y3Rvcj4KLQotICAgIDxkZXN0cnVjdG9yPgotICAgICAgPGVmZmVjdHM+PHNpbXBhcmE+SWYgPGNvZGU+IXRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPiwgZGVzdHJveXMgdGhlIHRhcmdldCBvZiA8Y29kZT50aGlzPC9jb2RlPi48L3NpbXBhcmE+PC9lZmZlY3RzPgotCi0gICAgPC9kZXN0cnVjdG9yPgotCi0gICAgPGNvcHktYXNzaWdubWVudD4KLSAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+Ci0gICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPgotICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+SWYgY29weSBjb25zdHJ1Y3Rpb24gZG9lcyBub3QgdGhyb3csIDxjb2RlPip0aGlzPC9jb2RlPiB0YXJnZXRzIGEgY29weSBvZiA8Y29kZT5mPC9jb2RlPidzIHRhcmdldCwgaWYgaXQgaGFzIG9uZSwgb3IgaXMgZW1wdHkgaWYgPGNvZGU+Zi48bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4uIElmIGNvcHkgY29uc3RydWN0aW9uIGRvZXMgdGhyb3csIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICA8L2NvcHktYXNzaWdubWVudD4KLSAgICAKLSAgICA8Y29weS1hc3NpZ25tZW50PgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KLSAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7JmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkMrKzExIGNvbXBhdGlibGUgY29tcGlsZXIuPC9zaW1wYXJhPjwvcmVxdWlyZXM+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+TW92ZXMgdGhlIHZhbHVlIGZyb20gPGNvZGU+ZjwvY29kZT4gdG8gPGNvZGU+KnRoaXM8L2NvZGU+LiBJZiB0aGUgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCBpdHMgYnVmZmVyIHdpbGwgYmUgYXNzaWduZWQgdG8gPGNvZGU+KnRoaXM8L2NvZGU+IGxlYXZpbmcgYXJndW1lbnQgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHVubGVzcyBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgbm90IG9uIHRoZSBoZWFwIGFuZCBjb3B5aW5nIHRoZSB0YXJnZXQgb2YgPGNvZGU+ZjwvY29kZT4gdGhyb3dzLjwvc2ltcGFyYT48L3Rocm93cz4KLSAgICA8L2NvcHktYXNzaWdubWVudD4KLQotICAgIDxjb3B5LWFzc2lnbm1lbnQ+Ci0gICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgotICAgICAgICA8cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPgotICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+SWYgY29weSBjb25zdHJ1Y3Rpb24gb2YgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiBkb2VzIG5vdCB0aHJvdywgPGNvZGU+KnRoaXM8L2NvZGU+IHRhcmdldHMgYSBjb3B5IG9mIDxjb2RlPmY8L2NvZGU+J3MgdGFyZ2V0LCBpZiBpdCBoYXMgb25lLCBvciBpcyBlbXB0eSBpZiA8Y29kZT5mLjxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi4gPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHdoZW4gdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiBpcyBhIHN0YXRlbGVzcyBmdW5jdGlvbiBvYmplY3Qgb3IgYSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdC4gSWYgY29weSBjb25zdHJ1Y3Rpb24gZG9lcyB0aHJvdywgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L3Rocm93cz4KLSAgICA8L2NvcHktYXNzaWdubWVudD4KLSAgICAKLSAgICA8Y29weS1hc3NpZ25tZW50PgotICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KLSAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+JmFtcDsmYW1wOzwvcGFyYW10eXBlPgotICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICA8cmVxdWlyZXM+PHNpbXBhcmE+QysrMTEgY29tcGF0aWJsZSBjb21waWxlci48L3NpbXBhcmE+PC9yZXF1aXJlcz4KLSAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Nb3ZlcyB0aGUgdmFsdWUgZnJvbSA8Y29kZT5mPC9jb2RlPiB0byA8Y29kZT4qdGhpczwvY29kZT4uIElmIHRoZSBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIGl0cyBidWZmZXIgd2lsbCBiZSBhc3NpZ25lZCB0byA8Y29kZT4qdGhpczwvY29kZT4gbGVhdmluZyBhcmd1bWVudCBlbXB0eS48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KLSAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGFyZ3VtZW50IGhhcyBpdHMgZnVuY3Rpb24gb2JqZWN0IGFsbG9jYXRlZCBub3Qgb24gdGhlIGhlYXAgYW5kIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgIDwvY29weS1hc3NpZ25tZW50PgotCi0gICAgPG1ldGhvZC1ncm91cCBuYW1lPSJtb2RpZmllcnMiPgotICAgICAgPG1ldGhvZCBuYW1lPSJzd2FwIj4KLSAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8ZWZmZWN0cz48c2ltcGFyYT5JbnRlcmNoYW5nZXMgdGhlIHRhcmdldHMgb2YgPGNvZGU+KnRoaXM8L2NvZGU+IGFuZCA8Y29kZT5mPC9jb2RlPi48L3NpbXBhcmE+PC9lZmZlY3RzPgotICAgICAgPC9tZXRob2Q+Ci0KLSAgICAgIDxtZXRob2QgbmFtZT0iY2xlYXIiPgotICAgICAgICA8dHlwZT52b2lkPC90eXBlPgotICAgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+PC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+Ci0gICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgICAgPC9tZXRob2Q+Ci0gICAgPC9tZXRob2QtZ3JvdXA+Ci0KLSAgICA8bWV0aG9kLWdyb3VwIG5hbWU9ImNhcGFjaXR5Ij4KLSAgICAgIDxtZXRob2QgbmFtZT0iZW1wdHkiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50aGlzPC9jb2RlPiBoYXMgYSB0YXJnZXQsIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L21ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJjb252ZXJzaW9uLW9wZXJhdG9yIiBjdj0iY29uc3QiPgotICAgICAgICA8dHlwZT5zYWZlX2Jvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPkEgPGNvZGU+c2FmZV9ib29sPC9jb2RlPiB0aGF0IGV2YWx1YXRlcyA8Y29kZT5mYWxzZTwvY29kZT4gaW4gYSBib29sZWFuIGNvbnRleHQgd2hlbiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4sIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+Ci0gICAgICA8L21ldGhvZD4KLQotICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvciEiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPjwvc2ltcGFyYT48L3JldHVybnM+Ci0gICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgICAgPC9tZXRob2Q+Ci0gICAgPC9tZXRob2QtZ3JvdXA+Ci0KLSAgICA8bWV0aG9kLWdyb3VwIG5hbWU9InRhcmdldCBhY2Nlc3MiPgotICAgICAgPG92ZXJsb2FkZWQtbWV0aG9kIG5hbWU9InRhcmdldCI+Ci0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPiAKLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5GdW5jdG9yKjwvdHlwZT4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0gICAgICAgIDxzaWduYXR1cmUgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dGVtcGxhdGU+IAotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPmNvbnN0IEZ1bmN0b3IqPC90eXBlPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5JZiA8Y29kZT50aGlzPC9jb2RlPiBzdG9yZXMgYSB0YXJnZXQgb2YgdHlwZQotICAgICAgICA8Y29kZT5GdW5jdG9yPC9jb2RlPiwgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUKLSAgICAgICAgdGFyZ2V0LiBPdGhlcndpc2UsIHJldHVybnMgdGhlIE5VTEwKLSAgICAgICAgcG9pbnRlci48L3NpbXBhcmE+PC9yZXR1cm5zPgotICAgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93Ljwvc2ltcGFyYT48L3Rocm93cz4KLSAgICAgIDwvb3ZlcmxvYWRlZC1tZXRob2Q+Ci0KLSAgICAgIDxtZXRob2QgbmFtZT0iY29udGFpbnMiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgotICAgICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgRnVuY3RvciZhbXA7PC9wYXJhbXR5cGU+Ci0gICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICA8cmV0dXJucz48c2ltcGFyYT48Y29kZT50cnVlPC9jb2RlPiBpZiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT50YXJnZXQ8L21ldGhvZG5hbWU+Jmx0O0Z1bmN0b3ImZ3Q7KCk8L2NvZGU+IGlzIG5vbi1OVUxMIGFuZCA8Y29kZT48ZnVuY3Rpb25uYW1lPmZ1bmN0aW9uX2VxdWFsPC9mdW5jdGlvbm5hbWU+KCoodGhpcy0mZ3Q7dGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkpLCBmKTwvY29kZT48L3NpbXBhcmE+PC9yZXR1cm5zPgotIAotICAgICAgPC9tZXRob2Q+Ci0KLSAgICAgIDxtZXRob2QgbmFtZT0idGFyZ2V0X3R5cGUiIGN2PSJjb25zdCI+Ci0gICAgICAgIDx0eXBlPmNvbnN0IHN0ZDo6dHlwZV9pbmZvJmFtcDs8L3R5cGU+Ci0gICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnR5cGVpZDwvY29kZT4gb2YgdGhlIHRhcmdldCBmdW5jdGlvbiBvYmplY3QsIG9yIDxjb2RlPnR5cGVpZCh2b2lkKTwvY29kZT4gaWYgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L3JldHVybnM+Ci0gICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgICAgPC9tZXRob2Q+Ci0gICAgPC9tZXRob2QtZ3JvdXA+Ci0KLSAgICA8bWV0aG9kLWdyb3VwIG5hbWU9Imludm9jYXRpb24iPgotICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgotICAgICAgICA8dHlwZT5yZXN1bHRfdHlwZTwvdHlwZT4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJhMSI+PHBhcmFtdHlwZT5hcmcxX3R5cGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJhMiI+PHBhcmFtdHlwZT5hcmcyX3R5cGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPHBhcmFtZXRlcj48cGFyYW10eXBlPi4uLjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImFOIj48cGFyYW10eXBlPmFyZ05fdHlwZTwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8ZWZmZWN0cz48c2ltcGFyYT48Y29kZT5mKGExLCBhMiwgLi4uLCBhTik8L2NvZGU+LCB3aGVyZSA8Y29kZT5mPC9jb2RlPiBpcyB0aGUgdGFyZ2V0IG9mIDxjb2RlPip0aGlzPC9jb2RlPi48L3NpbXBhcmE+PC9lZmZlY3RzPgotICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5pZiA8Y29kZT5SPC9jb2RlPiBpcyA8Y29kZT52b2lkPC9jb2RlPiwgbm90aGluZyBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsIHRvIDxjb2RlPmY8L2NvZGU+IGlzIHJldHVybmVkLjwvc2ltcGFyYT48L3JldHVybnM+Ci0gICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+PGNvZGU+PGNsYXNzbmFtZT5iYWRfZnVuY3Rpb25fY2FsbDwvY2xhc3NuYW1lPjwvY29kZT4gaWYgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+LiBPdGhlcndpc2UsIG1heSB0aHJvdWdoIGFueSBleGNlcHRpb24gdGhyb3duIGJ5IHRoZSB0YXJnZXQgZnVuY3Rpb24gPGNvZGU+ZjwvY29kZT4uPC9zaW1wYXJhPjwvdGhyb3dzPgotICAgICAgPC9tZXRob2Q+Ci0gICAgPC9tZXRob2QtZ3JvdXA+Ci0KLSAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJzcGVjaWFsaXplZCBhbGdvcml0aG1zIj4KLSAgICAgIDxmdW5jdGlvbiBuYW1lPSJzd2FwIj4KLSAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KLSAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMSI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYyIj48cGFyYW10eXBlPjxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7U2lnbmF0dXJlJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPjxjb2RlPmYxLjxtZXRob2RuYW1lPnN3YXA8L21ldGhvZG5hbWU+KGYyKTwvY29kZT48L3NpbXBhcmE+PC9lZmZlY3RzPgotICAgICAgPC9mdW5jdGlvbj4KLSAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+Ci0KLSAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJjb21wYXJpc29uIG9wZXJhdG9ycyI+Ci0gICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJvcGVyYXRvcj09Ij4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUmZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4gICAgICAgIAotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7U2lnbmF0dXJlJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlNpZ25hdHVyZTEiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUyIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT52b2lkPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjEiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUxJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZTImZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+VHJ1ZSB3aGVuIDxjb2RlPmY8L2NvZGU+IHN0b3JlcyBhbiBvYmplY3Qgb2YKLSAgICAgICAgdHlwZSA8Y29kZT5GdW5jdG9yPC9jb2RlPiBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBsaWVzOgotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0KLSAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT48Y29kZT5nPC9jb2RlPiBpcyBvZiB0eXBlCi0gICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgotICAgICAgICAgICAgYW5kIDxjb2RlPmYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkgPT0gZy48bWV0aG9kbmFtZQotICAgICAgICAgICAgYWx0PSJyZWZlcmVuY2Vfd3JhcHBlcjo6Z2V0X3BvaW50ZXIiPmdldF9wb2ludGVyPC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KLQotICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxjb2RlPmc8L2NvZGU+IGlzIG5vdCBvZiB0eXBlCi0gICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgotICAgICAgICAgICAgYW5kIDxjb2RlPjxmdW5jdGlvbm5hbWU+ZnVuY3Rpb25fZXF1YWxzPC9mdW5jdGlvbm5hbWU+KCooZi50YXJnZXQmbHQ7RnVuY3RvciZndDsoKSksIGcpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KLQotICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgIDwvc2ltcGFyYT48L3JldHVybnM+Ci0KLSAgICAgICAgPG5vdGVzPjxzaW1wYXJhPjxjb2RlPjxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT48L2NvZGU+Ci0gICAgICAgIG9iamVjdHMgYXJlIG5vdAotICAgICAgICA8Y29uY2VwdG5hbWU+RXF1YWxpdHlDb21wYXJhYmxlPC9jb25jZXB0bmFtZT4uPC9zaW1wYXJhPjwvbm90ZXM+Ci0KLSAgICAgICAgPHJhdGlvbmFsZT48c2ltcGFyYT5UaGUgPGNvZGU+c2FmZV9ib29sPC9jb2RlPiBjb252ZXJzaW9uCi0gICAgICAgIG9wZW5zIGEgbG9vcGhvbGUgd2hlcmVieSB0d28gPGNvZGU+ZnVuY3Rpb248L2NvZGU+Ci0gICAgICAgIGluc3RhbmNlcyBjYW4gYmUgY29tcGFyZWQgdmlhIDxjb2RlPj09PC9jb2RlPiwgYWx0aG91Z2ggdGhpcwotICAgICAgICBpcyBub3QgZmVhc2libGUgdG8gaW1wbGVtZW50LiBUaGUgdW5kZWZpbmVkIDxjb2RlPnZvaWQKLSAgICAgICAgb3BlcmF0b3I9PTwvY29kZT4gY2xvc2VzIHRoZSBsb29waG9sZSBhbmQgZW5zdXJlcyBhCi0gICAgICAgIGNvbXBpbGUtdGltZSBvciBsaW5rLXRpbWUgZXJyb3IuPC9zaW1wYXJhPjwvcmF0aW9uYWxlPgotICAgICAgPC9vdmVybG9hZGVkLWZ1bmN0aW9uPgotCi0gICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJvcGVyYXRvciE9Ij4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUmZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4gICAgICAgIAotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7U2lnbmF0dXJlJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlNpZ25hdHVyZTEiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUyIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT52b2lkPC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjEiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUxJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZTImZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+VHJ1ZSB3aGVuIDxjb2RlPmY8L2NvZGU+IGRvZXMgbm90IHN0b3JlIGFuCi0gICAgICAgIG9iamVjdCBvZiB0eXBlIDxjb2RlPkZ1bmN0b3I8L2NvZGU+IG9yIGl0IHN0b3JlcyBhbiBvYmplY3Qgb2YKLSAgICAgICAgdHlwZSA8Y29kZT5GdW5jdG9yPC9jb2RlPiBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgICAgICBhcHBsaWVzOgotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0KLSAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT48Y29kZT5nPC9jb2RlPiBpcyBvZiB0eXBlCi0gICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgotICAgICAgICAgICAgYW5kIDxjb2RlPmYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkgIT0gZy48bWV0aG9kbmFtZQotICAgICAgICAgICAgYWx0PSJyZWZlcmVuY2Vfd3JhcHBlcjo6Z2V0X3BvaW50ZXIiPmdldF9wb2ludGVyPC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KLQotICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxjb2RlPmc8L2NvZGU+IGlzIG5vdCBvZiB0eXBlCi0gICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgotICAgICAgICAgICAgYW5kIDxjb2RlPiE8ZnVuY3Rpb25uYW1lPmZ1bmN0aW9uX2VxdWFsczwvZnVuY3Rpb25uYW1lPigqKGYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkpLCBnKTwvY29kZT4uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICA8L3NpbXBhcmE+PC9yZXR1cm5zPgotCi0gICAgICAgIDxub3Rlcz48c2ltcGFyYT48Y29kZT48Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+PC9jb2RlPgotICAgICAgICBvYmplY3RzIGFyZSBub3QKLSAgICAgICAgPGNvbmNlcHRuYW1lPkVxdWFsaXR5Q29tcGFyYWJsZTwvY29uY2VwdG5hbWU+Ljwvc2ltcGFyYT48L25vdGVzPgotCi0gICAgICAgIDxyYXRpb25hbGU+PHNpbXBhcmE+VGhlIDxjb2RlPnNhZmVfYm9vbDwvY29kZT4gY29udmVyc2lvbgotICAgICAgICBvcGVucyBhIGxvb3Bob2xlIHdoZXJlYnkgdHdvIDxjb2RlPmZ1bmN0aW9uPC9jb2RlPgotICAgICAgICBpbnN0YW5jZXMgY2FuIGJlIGNvbXBhcmVkIHZpYSA8Y29kZT4hPTwvY29kZT4sIGFsdGhvdWdoIHRoaXMKLSAgICAgICAgaXMgbm90IGZlYXNpYmxlIHRvIGltcGxlbWVudC4gVGhlIHVuZGVmaW5lZCA8Y29kZT52b2lkCi0gICAgICAgIG9wZXJhdG9yIT08L2NvZGU+IGNsb3NlcyB0aGUgbG9vcGhvbGUgYW5kIGVuc3VyZXMgYQotICAgICAgICBjb21waWxlLXRpbWUgb3IgbGluay10aW1lIGVycm9yLjwvc2ltcGFyYT48L3JhdGlvbmFsZT4KLSAgICAgIDwvb3ZlcmxvYWRlZC1mdW5jdGlvbj4KLSAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+Ci0gIDwvY2xhc3M+Ci08L25hbWVzcGFjZT4KLTwvaGVhZGVyPgotCi08aGVhZGVyIG5hbWU9ImJvb3N0L2Z1bmN0aW9uX2VxdWFsLmhwcCI+Ci0gIDxuYW1lc3BhY2UgbmFtZT0iYm9vc3QiPgotICA8ZnVuY3Rpb24gbmFtZT0iZnVuY3Rpb25fZXF1YWwiPgotICAgIDx0ZW1wbGF0ZT4KLSAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGIi8+Ci0gICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRyIvPgotICAgIDwvdGVtcGxhdGU+Ci0gICAgPHR5cGU+Ym9vbDwvdHlwZT4KLSAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgotICAgICAgPHBhcmFtdHlwZT5jb25zdCBGJmFtcDs8L3BhcmFtdHlwZT4KLSAgICA8L3BhcmFtZXRlcj4KLSAgICA8cGFyYW1ldGVyIG5hbWU9ImciPgotICAgICAgPHBhcmFtdHlwZT5jb25zdCBHJmFtcDs8L3BhcmFtdHlwZT4KLSAgICA8L3BhcmFtZXRlcj4KLSAgICA8cHVycG9zZT48c2ltcGFyYT5Db21wYXJlIHR3byBmdW5jdGlvbiBvYmplY3RzIGZvciBlcXVhbGl0eS48L3NpbXBhcmE+PC9wdXJwb3NlPgotICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmYgPT0gZzwvY29kZT4uPC9zaW1wYXJhPjwvcmV0dXJucz4KLSAgICA8dGhyb3dzPjxzaW1wYXJhPk9ubHkgaWYgPGNvZGU+ZiA9PSBnPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgotICA8L2Z1bmN0aW9uPgotICA8L25hbWVzcGFjZT4KLTwvaGVhZGVyPgotPC9saWJyYXJ5LXJlZmVyZW5jZT4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL3Rlc3RzLnhtbCBiL2xpYnMvZnVuY3Rpb24vZG9jL3Rlc3RzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhkOGI2NS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL2RvYy90ZXN0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLSAgIENvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIEdyZWdvciA8ZG91Zy5ncmVnb3IgLWF0LSBnbWFpbC5jb20+Ci0gIAotICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICAtLT4KLTwhRE9DVFlQRSBsaWJyYXJ5IFBVQkxJQyAiLS8vQm9vc3QvL0RURCBCb29zdEJvb2sgWE1MIFYxLjAvL0VOIgotICAiaHR0cDovL3d3dy5ib29zdC5vcmcvdG9vbHMvYm9vc3Rib29rL2R0ZC9ib29zdGJvb2suZHRkIj4KLTx0ZXN0c3VpdGUgaWQ9ImZ1bmN0aW9uLnRlc3RzdWl0ZSIgbGFzdC1yZXZpc2lvbj0iJERhdGU6IDIwMDYtMTEtMDMgMTE6NDE6MTAgLTA4MDAgKEZyaSwgMDMgTm92IDIwMDYpICQiPgotICA8cnVuLXRlc3QgZmlsZW5hbWU9ImZ1bmN0aW9uX3Rlc3QuY3BwIiBuYW1lPSJsaWJfZnVuY3Rpb25fdGVzdCI+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiBjbGFzcyB0ZW1wbGF0ZS48L3BhcmE+PC9wdXJwb3NlPgotICAgIDxpZi1mYWlscz48cGFyYT5UaGUgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4gY2xhc3MgdGVtcGxhdGUgbWF5IG5vdCBiZSB1c2FibGUgb24geW91ciBjb21waWxlci4gSG93ZXZlciwgdGhlIGxpYnJhcnkgbWF5IHN0aWxsIGJlIHVzYWJsZSB2aWEgdGhlIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiBjbGFzcyB0ZW1wbGF0ZXMuPC9wYXJhPjwvaWYtZmFpbHM+Ci0gIDwvcnVuLXRlc3Q+Ci0KLSAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJmdW5jdGlvbl9uX3Rlc3QuY3BwIj4KLSAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiBjbGFzcyB0ZW1wbGF0ZXMuPC9wYXJhPjwvcHVycG9zZT4KLSAgPC9ydW4tdGVzdD4KLQotICA8cnVuLXRlc3QgZmlsZW5hbWU9ImFsbG9jYXRvcl90ZXN0LmNwcCI+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgdXNlIG9mIGN1c3RvbSBhbGxvY2F0b3JzLjwvcGFyYT48L3B1cnBvc2U+Ci0gICAgPGlmLWZhaWxzPjxwYXJhPkFsbG9jYXRvcnMgYXJlIGlnbm9yZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLjwvcGFyYT48L2lmLWZhaWxzPgotICA8L3J1bi10ZXN0PgotCi0gIDxydW4tdGVzdCBmaWxlbmFtZT0ic3RhdGVsZXNzX3Rlc3QuY3BwIj4KLSAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBvcHRpbWl6YXRpb24gb2Ygc3RhdGVsZXNzIGZ1bmN0aW9uIG9iamVjdHMgaW4gdGhlIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkuPC9wYXJhPjwvcHVycG9zZT4KLSAgICA8aWYtZmFpbHM+PHBhcmE+VGhlIGV4Y2VwdGlvbi1zYWZldHkgYW5kIHBlcmZvcm1hbmNlIGd1YXJhbnRlZXMgZ2l2ZW4gZm9yIHN0YXRlbGVzcyBmdW5jdGlvbiBvYmplY3RzIG1heSBub3QgYmUgbWV0IGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi48L3BhcmE+PC9pZi1mYWlscz4KLSAgPC9ydW4tdGVzdD4KLQotICA8cnVuLXRlc3QgZmlsZW5hbWU9ImxhbWJkYV90ZXN0LmNwcCI+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBCb29zdC5GdW5jdGlvbiBhbmQgQm9vc3QuTGFtYmRhLjwvcGFyYT48L3B1cnBvc2U+Ci0gICAgPGlmLWZhaWxzPjxwYXJhPkVpdGhlciBCb29zdC5MYW1iZGEgZG9lcyBub3Qgd29yayBvbiB0aGUgcGxhdGZvcm0sIG9yIEJvb3N0LkZ1bmN0aW9uIGNhbm5vdCBzYWZlbHkgYmUgYXBwbGllZCB3aXRob3V0IHRoZSB1c2Ugb2YgPGZ1bmN0aW9ubmFtZT5ib29zdDo6dW5sYW1iZGE8L2Z1bmN0aW9ubmFtZT4uPC9wYXJhPjwvaWYtZmFpbHM+Ci0gIDwvcnVuLXRlc3Q+Ci0KLSAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJjb250YWluc190ZXN0LmNwcCI+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgb3BlcmF0aW9uIG9mIHRoZQotICAgIDxjb2RlPjxtZXRob2RuYW1lPnRhcmdldDwvbWV0aG9kbmFtZT48L2NvZGU+IG1lbWJlciBmdW5jdGlvbiBhbmQgdGhlCi0gICAgZXF1YWxpdHkgb3BlcmF0b3JzLjwvcGFyYT48L3B1cnBvc2U+Ci0gIDwvcnVuLXRlc3Q+Ci0KLSAgPGNvbXBpbGUtZmFpbC10ZXN0IGZpbGVuYW1lPSJmdW5jdGlvbl90ZXN0X2ZhaWwxLmNwcCI+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgKGluY29ycmVjdCEpIHVzZSBvZiBjb21wYXJpc29ucyBiZXR3ZWVuIEJvb3N0LkZ1bmN0aW9uIGZ1bmN0aW9uIG9iamVjdHMuPC9wYXJhPjwvcHVycG9zZT4KLSAgICA8aWYtZmFpbHM+PHBhcmE+SW50dWl0aXZlIChidXQgaW5jb3JyZWN0ISkgY29kZSBtYXkgY29tcGlsZSBhbmQgd2lsbCBnaXZlIG1lYW5pbmdsZXNzIHJlc3VsdHMuPC9wYXJhPjwvaWYtZmFpbHM+Ci0gIDwvY29tcGlsZS1mYWlsLXRlc3Q+Ci0KLSAgPGNvbXBpbGUtZmFpbC10ZXN0IGZpbGVuYW1lPSJmdW5jdGlvbl90ZXN0X2ZhaWwyLmNwcCI+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgdXNlIG9mIGFuIGluY29tcGF0aWJsZSBmdW5jdGlvbiBvYmplY3Qgd2l0aCBCb29zdC5GdW5jdGlvbjwvcGFyYT48L3B1cnBvc2U+Ci0gICAgPGlmLWZhaWxzPjxwYXJhPkluY29ycmVjdCBjb2RlIG1heSBjb21waWxlICh3aXRoIHBvdGVudGlhbGx5IHVuZXhwZWN0ZWQgcmVzdWx0cykuPC9wYXJhPjwvaWYtZmFpbHM+Ci0gIDwvY29tcGlsZS1mYWlsLXRlc3Q+Ci0KLSAgPGNvbXBpbGUtdGVzdCBmaWxlbmFtZT0iZnVuY3Rpb25fMzAuY3BwIj4KLSAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBnZW5lcmF0aW9uIG9mIGEgQm9vc3QuRnVuY3Rpb24gZnVuY3Rpb24gb2JqZWN0IGFkYXB0b3IgYWNjZXB0aW5nIDMwIGFyZ3VtZW50cy48L3BhcmE+PC9wdXJwb3NlPgotICAgIDxpZi1mYWlscz48cGFyYT5UaGUgQm9vc3QuRnVuY3Rpb24gbGlicmFyeSBtYXkgd29yayBmb3IgZnVuY3Rpb24gb2JqZWN0IGFkYXB0b3JzIG9mIHVwIHRvIDEwIHBhcmFtZXRlcnMsIGJ1dCB3aWxsIGJlIHVuYWJsZSB0byBnZW5lcmF0ZSBhZGFwdG9ycyBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwYXJhbWV0ZXJzLiBGYWlsdXJlIG9mdGVuIGluZGljYXRlcyBhbiBlcnJvciBpbiB0aGUgY29tcGlsZXIncyBwcmVwcm9jZXNzb3IuPC9wYXJhPjwvaWYtZmFpbHM+Ci0gIDwvY29tcGlsZS10ZXN0PiAKLQotICA8cnVuLXRlc3QgZmlsZW5hbWU9ImZ1bmN0aW9uX2FyaXRoX2N4eDk4LmNwcCI+Ci0gICAgPHNvdXJjZT4KLSAgICA8IVtDREFUQVsKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci1dXT4KLQotPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubXVsX2ludHMiLz4KLTxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmludF9kaXYiLz4KLQotaW50IG1haW4oKQotewotICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmFyaXRoLmN4eDk4Ii8+Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwudXNlX2ludF9kaXYiLz4KLSAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jYWxsX2ludF9kaXYiLz4KLSAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jaGVja19lbXB0eSIvPgotICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNsZWFyIi8+Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwudXNlX211bF9pbnRzIi8+Ci0gIAotICAgIHJldHVybiAwOwotfQotPC9zb3VyY2U+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgZmlyc3QgdHV0b3JpYWwgZXhhbXBsZS48L3BhcmE+PC9wdXJwb3NlPgotICA8L3J1bi10ZXN0PgotCi0gIDxydW4tdGVzdCBmaWxlbmFtZT0iZnVuY3Rpb25fYXJpdGhfcG9ydGFibGUuY3BwIj4KLSAgICA8c291cmNlPgotICAgIDwhW0NEQVRBWwotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLV1dPgotPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubXVsX2ludHMiLz4KLTxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmludF9kaXYiLz4KLWludCBtYWluKCkKLXsKLSAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5hcml0aC5wb3J0YWJsZSIvPgotICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnVzZV9pbnRfZGl2Ii8+Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuY2FsbF9pbnRfZGl2Ii8+Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuY2hlY2tfZW1wdHkiLz4KLSAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jbGVhciIvPgotICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnVzZV9tdWxfaW50cyIvPgotCi0gICAgcmV0dXJuIDA7Ci19Ci08L3NvdXJjZT4KLSAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBmaXJzdCB0dXRvcmlhbCBleGFtcGxlLjwvcGFyYT48L3B1cnBvc2U+Ci0gIDwvcnVuLXRlc3Q+Ci0KLSAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJzdW1fYXZnX2N4eDk4LmNwcCI+Ci0gICAgPHNvdXJjZT4KLSAgICA8IVtDREFUQVsKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci1dXT4KLTxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN1bV9hdmciLz4KLWludCBtYWluKCkKLXsKLSAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdW1fYXZnX2RlY2wuY3h4OTgiLz4KLSAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2Vfc3VtX2F2ZyIvPgotCi0gICAgcmV0dXJuIDA7Ci19Ci08L3NvdXJjZT4KLSAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBzZWNvbmQgdHV0b3JpYWwgZXhhbXBsZS48L3BhcmE+PC9wdXJwb3NlPgotICA8L3J1bi10ZXN0PgotCi0gIDxydW4tdGVzdCBmaWxlbmFtZT0ic3VtX2F2Z19wb3J0YWJsZS5jcHAiPgotICAgIDxzb3VyY2U+Ci0gICAgPCFbQ0RBVEFbCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotXV0+Ci08c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdW1fYXZnIi8+Ci1pbnQgbWFpbigpCi17Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuc3VtX2F2Z19kZWNsLnBvcnRhYmxlIi8+Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwudXNlX3N1bV9hdmciLz4KLQotICAgIHJldHVybiAwOwotfQotPC9zb3VyY2U+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCB0aGUgc2Vjb25kIHR1dG9yaWFsIGV4YW1wbGUuPC9wYXJhPjwvcHVycG9zZT4KLSAgPC9ydW4tdGVzdD4KLQotICA8cnVuLXRlc3QgZmlsZW5hbWU9Im1lbV9mdW5fY3h4OTguY3BwIj4KLSAgICA8c291cmNlPgotICAgIDwhW0NEQVRBWwotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotXV0+Ci08c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5YIi8+Ci1pbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQotCi1pbnQgbWFpbigpCi17Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubWVtX2Z1bi5jeHg5OCIvPgotCi0gICAgcmV0dXJuIDA7Ci19Ci08L3NvdXJjZT4gICAgCi0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCBtZW1iZXIgZnVuY3Rpb24gZXhhbXBsZSBmcm9tIHR1dG9yaWFsLjwvcGFyYT48L3B1cnBvc2U+Ci0gIDwvcnVuLXRlc3Q+Ci0KLSAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJtZW1fZnVuX3BvcnRhYmxlLmNwcCI+Ci0gICAgPHNvdXJjZT4KLSAgICA8IVtDREFUQVsKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLV1dPgotPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuWCIvPgotaW50IFg6OmZvbyhpbnQgeCkgeyByZXR1cm4gLXg7IH0KLQotaW50IG1haW4oKQotewotICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLm1lbV9mdW4ucG9ydGFibGUiLz4KLQotICAgIHJldHVybiAwOwotfQotPC9zb3VyY2U+ICAgIAotICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgbWVtYmVyIGZ1bmN0aW9uIGV4YW1wbGUgZnJvbSB0dXRvcmlhbC48L3BhcmE+PC9wdXJwb3NlPgotICA8L3J1bi10ZXN0PgotCi0gIDxydW4tdGVzdCBmaWxlbmFtZT0ic3RkX2JpbmRfY3h4OTguY3BwIj4KLSAgICA8c291cmNlPgotICAgIDwhW0NEQVRBWwotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotXV0+Ci08c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5YIi8+Ci1pbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQotCi1pbnQgbWFpbigpCi17Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuc3RkX2JpbmQuY3h4OTgiLz4KLQotICAgIHJldHVybiAwOwotfQotPC9zb3VyY2U+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCBzdGFuZGFyZCBiaW5kZXJzIGV4YW1wbGUgZnJvbSB0dXRvcmlhbC48L3BhcmE+PC9wdXJwb3NlPgotICA8L3J1bi10ZXN0PgotCi0gIDxydW4tdGVzdCBmaWxlbmFtZT0ic3RkX2JpbmRfcG9ydGFibGUuY3BwIj4KLSAgICA8c291cmNlPgotICAgIDwhW0NEQVRBWwotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotXV0+Ci08c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5YIi8+Ci1pbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQotCi1pbnQgbWFpbigpCi17Ci0gICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuc3RkX2JpbmQucG9ydGFibGUiLz4KLQotICAgIHJldHVybiAwOwotfQotPC9zb3VyY2U+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCBzdGFuZGFyZCBiaW5kZXJzIGV4YW1wbGUgZnJvbSB0dXRvcmlhbC48L3BhcmE+PC9wdXJwb3NlPgotICA8L3J1bi10ZXN0PgotCi0gIDxydW4tdGVzdCBmaWxlbmFtZT0iZnVuY3Rpb25fcmVmX2N4eDk4LmNwcCI+Ci0gICAgPHNvdXJjZT4KLTwhW0NEQVRBWwotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLV1dPgotCi1zdHJ1Y3Qgc3RhdGVmdWxfdHlwZSB7IGludCBvcGVyYXRvcigpKGludCkgY29uc3QgeyByZXR1cm4gMDsgfSB9OwotCi1pbnQgbWFpbigpCi17Ci0gIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnJlZi5jeHg5OCIvPgotCi0gICAgcmV0dXJuIDA7Ci19Ci08L3NvdXJjZT4KLSAgICA8cHVycG9zZT48cGFyYT5UZXN0IDxmdW5jdGlvbm5hbWU+Ym9vc3Q6OnJlZjwvZnVuY3Rpb25uYW1lPiBleGFtcGxlIGZyb20gdHV0b3JpYWwuPC9wYXJhPjwvcHVycG9zZT4KLSAgPC9ydW4tdGVzdD4KLQotICA8cnVuLXRlc3QgZmlsZW5hbWU9ImZ1bmN0aW9uX3JlZl9wb3J0YWJsZS5jcHAiPgotICAgIDxzb3VyY2U+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci1dXT4KLQotc3RydWN0IHN0YXRlZnVsX3R5cGUgeyBpbnQgb3BlcmF0b3IoKShpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0gfTsKLQotaW50IG1haW4oKQotewotICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5yZWYucG9ydGFibGUiLz4KLQotICAgIHJldHVybiAwOwotfQotPC9zb3VyY2U+Ci0gICAgPHB1cnBvc2U+PHBhcmE+VGVzdCA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpyZWY8L2Z1bmN0aW9ubmFtZT4gZXhhbXBsZSBmcm9tIHR1dG9yaWFsLjwvcGFyYT48L3B1cnBvc2U+Ci0gIDwvcnVuLXRlc3Q+Ci08L3Rlc3RzdWl0ZT4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL3R1dG9yaWFsLnhtbCBiL2xpYnMvZnVuY3Rpb24vZG9jL3R1dG9yaWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyOWMzYS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL2RvYy90dXRvcmlhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLSAgIENvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIEdyZWdvciA8ZG91Zy5ncmVnb3IgLWF0LSBnbWFpbC5jb20+Ci0gIAotICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICAtLT4KLTwhRE9DVFlQRSBsaWJyYXJ5IFBVQkxJQyAiLS8vQm9vc3QvL0RURCBCb29zdEJvb2sgWE1MIFYxLjAvL0VOIgotICAiaHR0cDovL3d3dy5ib29zdC5vcmcvdG9vbHMvYm9vc3Rib29rL2R0ZC9ib29zdGJvb2suZHRkIj4KLTxzZWN0aW9uIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIiBpZD0iZnVuY3Rpb24udHV0b3JpYWwiCi0gICAgICAgICBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAwOS0wNy0xMiAwOToxMzozNSAtMDcwMCAoU3VuLCAxMiBKdWwgMjAwOSkgJCI+Ci08dGl0bGU+VHV0b3JpYWw8L3RpdGxlPgotCi08dXNpbmctbmFtZXNwYWNlIG5hbWU9ImJvb3N0Ii8+Ci0KLTxwYXJhPiBCb29zdC5GdW5jdGlvbiBoYXMgdHdvIHN5bnRhY3RpY2FsIGZvcm1zOiB0aGUgcHJlZmVycmVkIGZvcm0KLWFuZCB0aGUgcG9ydGFibGUgZm9ybS4gVGhlIHByZWZlcnJlZCBmb3JtIGZpdHMgbW9yZSBjbG9zZWx5IHdpdGggdGhlCi1DKysgbGFuZ3VhZ2UgYW5kIHJlZHVjZXMgdGhlIG51bWJlciBvZiBzZXBhcmF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzCi10aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCwgb2Z0ZW4gaW1wcm92aW5nIHJlYWRhYmlsaXR5OyBob3dldmVyLCB0aGUKLXByZWZlcnJlZCBmb3JtIGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcyBkdWUgdG8gY29tcGlsZXIKLWJ1Z3MuIFRoZSBjb21wYXRpYmxlIGZvcm0gd2lsbCB3b3JrIG9uIGFsbCBjb21waWxlcnMgc3VwcG9ydGVkIGJ5Ci1Cb29zdC5GdW5jdGlvbi4gQ29uc3VsdCB0aGUgdGFibGUgYmVsb3cgdG8gZGV0ZXJtaW5lIHdoaWNoIHN5bnRhY3RpYwotZm9ybSB0byB1c2UgZm9yIHlvdXIgY29tcGlsZXIuCi0KLSAgPGluZm9ybWFsdGFibGU+Ci0gICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8dGhlYWQ+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PlByZWZlcnJlZCBzeW50YXg8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT5Qb3J0YWJsZSBzeW50YXg8L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgIDwvdGhlYWQ+Ci0gICAgICA8dGJvZHk+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPkdOVSBDKysgMi45NS54LCAzLjAueCBhbmQgbGF0ZXIgdmVyc2lvbnM8L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPkNvbWVhdSBDKysgNC4yLjQ1LjI8L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPlNHSSBNSVBTcHJvIDcuMy4wPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5JbnRlbCBDKysgNS4wLCA2LjA8L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPkNvbXBhcSdzIGN4eCA2LjI8L3NpbXBhcmE+PC9saXN0aXRlbT4KLQkgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+TWljcm9zb2Z0IFZpc3VhbCBDKysgNy4xIGFuZCBsYXRlciB2ZXJzaW9uczwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+PGVtcGhhc2lzPkFueSBjb21waWxlciBzdXBwb3J0aW5nIHRoZSBwcmVmZXJyZWQgc3ludGF4PC9lbXBoYXNpcz48L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPk1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMCwgNy4wPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5Cb3JsYW5kIEMrKyA1LjUuMTwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+U3VuIFdvcmtTaG9wIDYgdXBkYXRlIDIgQysrIDUuMzwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+TWV0cm93ZXJrcyBDb2RlV2FycmlvciA4LjE8L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgPC9pbmZvcm1hbHRhYmxlPgotCi08L3BhcmE+Ci0KLTxwYXJhPiBJZiB5b3VyIGNvbXBpbGVyIGRvZXMgbm90IGFwcGVhciBpbiB0aGlzIGxpc3QsIHBsZWFzZSB0cnkgdGhlIHByZWZlcnJlZCBzeW50YXggYW5kIHJlcG9ydCB5b3VyIHJlc3VsdHMgdG8gdGhlIEJvb3N0IGxpc3Qgc28gdGhhdCB3ZSBjYW4ga2VlcCB0aGlzIHRhYmxlIHVwLXRvLWRhdGUuPC9wYXJhPgotCi08dXNpbmctY2xhc3MgbmFtZT0iYm9vc3Q6OmZ1bmN0aW9uIi8+Ci0KLTxzZWN0aW9uPgotPHRpdGxlPkJhc2ljIFVzYWdlPC90aXRsZT4gPHBhcmE+IEEgZnVuY3Rpb24gd3JhcHBlciBpcyBkZWZpbmVkIHNpbXBseQotYnkgaW5zdGFudGlhdGluZyB0aGUgPGNvbXB1dGVyb3V0cHV0PmZ1bmN0aW9uPC9jb21wdXRlcm91dHB1dD4gY2xhc3MKLXRlbXBsYXRlIHdpdGggdGhlIGRlc2lyZWQgcmV0dXJuIHR5cGUgYW5kIGFyZ3VtZW50IHR5cGVzLCBmb3JtdWxhdGVkCi1hcyBhIEMrKyBmdW5jdGlvbiB0eXBlLiBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBtYXkgYmUgc3VwcGxpZWQsIHVwIHRvCi1zb21lIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbGltaXQgKDEwIGlzIHRoZSBkZWZhdWx0IG1heGltdW0pLiBUaGUKLWZvbGxvd2luZyBkZWNsYXJlcyBhIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyCi08Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IHRoYXQgdGFrZXMgdHdvCi08Y29tcHV0ZXJvdXRwdXQ+aW50PC9jb21wdXRlcm91dHB1dD4gcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhCi08Y29tcHV0ZXJvdXRwdXQ+ZmxvYXQ8L2NvbXB1dGVyb3V0cHV0PjoKLQotICA8aW5mb3JtYWx0YWJsZT4KLSAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgICAgIDx0aGVhZD4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+UHJlZmVycmVkIHN5bnRheDwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5PlBvcnRhYmxlIHN5bnRheDwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgPC90aGVhZD4KLSAgICAgIDx0Ym9keT4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+Ci08cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuYXJpdGguY3h4OTgiPjxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O2Zsb2F0IChpbnQgeCwgaW50IHkpJmd0OyBmOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L2VudHJ5PgotPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmFyaXRoLnBvcnRhYmxlIj48Y2xhc3NuYW1lIGFsdD0iZnVuY3Rpb25OIj5ib29zdDo6ZnVuY3Rpb24yPC9jbGFzc25hbWU+Jmx0O2Zsb2F0LCBpbnQsIGludCZndDsgZjs8L3Byb2dyYW1saXN0aW5nPgotPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgPC90Ym9keT4KLSAgICAgIDwvdGdyb3VwPgotICAgIDwvaW5mb3JtYWx0YWJsZT4KLTwvcGFyYT4KLQotPHBhcmE+IEJ5IGRlZmF1bHQsIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycyBhcmUgZW1wdHksIHNvIHdlIGNhbiBjcmVhdGUgYSAKLWZ1bmN0aW9uIG9iamVjdCB0byBhc3NpZ24gdG8gPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0PjoKLQotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmludF9kaXYiPnN0cnVjdCBpbnRfZGl2IHsgCi0gIGZsb2F0IG9wZXJhdG9yKCkoaW50IHgsIGludCB5KSBjb25zdCB7IHJldHVybiAoKGZsb2F0KXgpL3k7IH07IAotfTs8L3Byb2dyYW1saXN0aW5nPgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnVzZV9pbnRfZGl2Ij5mID0gaW50X2RpdigpOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L3BhcmE+Ci0KLTxwYXJhPiBOb3cgd2UgY2FuIHVzZSA8Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IHRvIGV4ZWN1dGUKLXRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdAotPGNvbXB1dGVyb3V0cHV0PmludF9kaXY8L2NvbXB1dGVyb3V0cHV0PjoKLQotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNhbGxfaW50X2RpdiI+c3RkOjpjb3V0ICZsdDsmbHQ7IGYoNSwgMykgJmx0OyZsdDsgc3RkOjplbmRsOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L3BhcmE+Ci0KLTxwYXJhPiBXZSBhcmUgZnJlZSB0byBhc3NpZ24gYW55IGNvbXBhdGlibGUgZnVuY3Rpb24gb2JqZWN0IHRvCi08Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+LiBJZgotPGNvbXB1dGVyb3V0cHV0PmludF9kaXY8L2NvbXB1dGVyb3V0cHV0PiBoYWQgYmVlbiBkZWNsYXJlZCB0byB0YWtlIHR3bwotPGNvbXB1dGVyb3V0cHV0Pmxvbmc8L2NvbXB1dGVyb3V0cHV0PiBvcGVyYW5kcywgdGhlIGltcGxpY2l0Ci1jb252ZXJzaW9ucyB3b3VsZCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgYXJndW1lbnRzIHdpdGhvdXQgYW55IHVzZXIKLWludGVyZmVyZW5jZS4gVGhlIG9ubHkgbGltaXQgb24gdGhlIHR5cGVzIG9mIGFyZ3VtZW50cyBpcyB0aGF0IHRoZXkgYmUKLUNvcHlDb25zdHJ1Y3RpYmxlLCBzbyB3ZSBjYW4gZXZlbiB1c2UgcmVmZXJlbmNlcyBhbmQgYXJyYXlzOgotCi0gIDxpbmZvcm1hbHRhYmxlPgotICAgIDx0Z3JvdXAgY29scz0iMSIgYWxpZ249ImxlZnQiPgotICAgICAgPHRoZWFkPjxyb3c+PGVudHJ5PlByZWZlcnJlZCBzeW50YXg8L2VudHJ5Pjwvcm93PjwvdGhlYWQ+Ci0gICAgICA8dGJvZHk+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN1bV9hdmdfZGVjbC5jeHg5OCI+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7dm9pZCAoaW50IHZhbHVlc1tdLCBpbnQgbiwgaW50JmFtcDsgc3VtLCBmbG9hdCZhbXA7IGF2ZykmZ3Q7IHN1bV9hdmc7PC9wcm9ncmFtbGlzdGluZz4KLTwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4gCi0gIDwvaW5mb3JtYWx0YWJsZT4KLSAgPGluZm9ybWFsdGFibGU+Ci0gICAgPHRncm91cCBjb2xzPSIxIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8dGhlYWQ+PHJvdz48ZW50cnk+UG9ydGFibGUgc3ludGF4PC9lbnRyeT48L3Jvdz48L3RoZWFkPgotICAgICAgPHRib2R5PgotICAgICAgICA8cm93PgotPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN1bV9hdmdfZGVjbC5wb3J0YWJsZSI+PGNsYXNzbmFtZSBhbHQ9ImZ1bmN0aW9uTiI+Ym9vc3Q6OmZ1bmN0aW9uNDwvY2xhc3NuYW1lPiZsdDt2b2lkLCBpbnQqLCBpbnQsIGludCZhbXA7LCBmbG9hdCZhbXA7Jmd0OyBzdW1fYXZnOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICA8L3Rib2R5PgotICAgICAgPC90Z3JvdXA+Ci0gICAgPC9pbmZvcm1hbHRhYmxlPgotCi08cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuc3VtX2F2ZyI+dm9pZCBkb19zdW1fYXZnKGludCB2YWx1ZXNbXSwgaW50IG4sIGludCZhbXA7IHN1bSwgZmxvYXQmYW1wOyBhdmcpCi17Ci0gIHN1bSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpICZsdDsgbjsgaSsrKQotICAgIHN1bSArPSB2YWx1ZXNbaV07Ci0gIGF2ZyA9IChmbG9hdClzdW0gLyBuOwotfTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLQotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnVzZV9zdW1fYXZnIj5zdW1fYXZnID0gJmFtcDtkb19zdW1fYXZnOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L3BhcmE+Ci0KLTxwYXJhPiBJbnZva2luZyBhIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyIHRoYXQgZG9lcyBub3QgYWN0dWFsbHkKLWNvbnRhaW4gYSBmdW5jdGlvbiBvYmplY3QgaXMgYSBwcmVjb25kaXRpb24gdmlvbGF0aW9uLCBtdWNoIGxpa2UKLXRyeWluZyB0byBjYWxsIHRocm91Z2ggYSBudWxsIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB3aWxsIHRocm93IGEgPGNsYXNzbmFtZT5iYWRfZnVuY3Rpb25fY2FsbDwvY2xhc3NuYW1lPiBleGNlcHRpb24pLiBXZSBjYW4gY2hlY2sgZm9yIGFuCi1lbXB0eSBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciBieSB1c2luZyBpdCBpbiBhIGJvb2xlYW4gY29udGV4dCAoaXQgZXZhbHVhdGVzIDxjb21wdXRlcm91dHB1dD50cnVlPC9jb21wdXRlcm91dHB1dD4gaWYgdGhlIHdyYXBwZXIgaXMgbm90IGVtcHR5KSBvciBjb21wYXJlIGl0IGFnYWluc3QgPGNvbXB1dGVyb3V0cHV0PjA8L2NvbXB1dGVyb3V0cHV0Pi4gRm9yIGluc3RhbmNlOgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNoZWNrX2VtcHR5Ij5pZiAoZikKLSAgc3RkOjpjb3V0ICZsdDsmbHQ7IGYoNSwgMykgJmx0OyZsdDsgc3RkOjplbmRsOwotZWxzZQotICBzdGQ6OmNvdXQgJmx0OyZsdDsgImYgaGFzIG5vIHRhcmdldCwgc28gaXQgaXMgdW5zYWZlIHRvIGNhbGwiICZsdDsmbHQ7IHN0ZDo6ZW5kbDs8L3Byb2dyYW1saXN0aW5nPgotPC9wYXJhPgotCi08cGFyYT4gQWx0ZXJuYXRpdmVseSwKLTxjb21wdXRlcm91dHB1dD48bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29tcHV0ZXJvdXRwdXQ+Ci1tZXRob2Qgd2lsbCByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHdyYXBwZXIgaXMgZW1wdHkuICA8L3BhcmE+Ci0KLTxwYXJhPiBGaW5hbGx5LCB3ZSBjYW4gY2xlYXIgb3V0IGEgZnVuY3Rpb24gdGFyZ2V0IGJ5IGFzc2lnbmluZyBpdCB0byA8Y29tcHV0ZXJvdXRwdXQ+MDwvY29tcHV0ZXJvdXRwdXQ+IG9yIGJ5IGNhbGxpbmcgdGhlIDxjb21wdXRlcm91dHB1dD48bWV0aG9kbmFtZT5jbGVhcjwvbWV0aG9kbmFtZT4oKTwvY29tcHV0ZXJvdXRwdXQ+IG1lbWJlciBmdW5jdGlvbiwgZS5nLiwgCi08cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuY2xlYXIiPmYgPSAwOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L3BhcmE+Ci0KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24+Ci0gIDx0aXRsZT5GcmVlIGZ1bmN0aW9uczwvdGl0bGU+Ci08cGFyYT4gRnJlZSBmdW5jdGlvbiBwb2ludGVycyBjYW4gYmUgY29uc2lkZXJlZCBzaW5nbGV0b24gZnVuY3Rpb24gb2JqZWN0cyB3aXRoIGNvbnN0IGZ1bmN0aW9uIGNhbGwgb3BlcmF0b3JzLCBhbmQgY2FuIHRoZXJlZm9yZSBiZSBkaXJlY3RseSB1c2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyczogCi08cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubXVsX2ludHMiPmZsb2F0IG11bF9pbnRzKGludCB4LCBpbnQgeSkgeyByZXR1cm4gKChmbG9hdCl4KSAqIHk7IH08L3Byb2dyYW1saXN0aW5nPgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnVzZV9tdWxfaW50cyI+ZiA9ICZhbXA7bXVsX2ludHM7PC9wcm9ncmFtbGlzdGluZz4KLTwvcGFyYT4KLQotPHBhcmE+IE5vdGUgdGhhdCB0aGUgPGNvbXB1dGVyb3V0cHV0PiZhbXA7PC9jb21wdXRlcm91dHB1dD4gaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSB1bmxlc3MgeW91IGhhcHBlbiB0byBiZSB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKyB2ZXJzaW9uIDYuIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24+Ci0gIDx0aXRsZT5NZW1iZXIgZnVuY3Rpb25zPC90aXRsZT4KLQotPHBhcmE+IEluIG1hbnkgc3lzdGVtcywgY2FsbGJhY2tzIG9mdGVuIGNhbGwgdG8gbWVtYmVyIGZ1bmN0aW9ucyBvZiBhCi1wYXJ0aWN1bGFyIG9iamVjdC4gVGhpcyBpcyBvZnRlbiByZWZlcnJlZCB0byBhcyAiYXJndW1lbnQgYmluZGluZyIsCi1hbmQgaXMgYmV5b25kIHRoZSBzY29wZSBvZiBCb29zdC5GdW5jdGlvbi4gVGhlIHVzZSBvZiBtZW1iZXIgZnVuY3Rpb25zCi1kaXJlY3RseSwgaG93ZXZlciwgaXMgc3VwcG9ydGVkLCBzbyB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdmFsaWQ6Ci0KLTxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5YIj5zdHJ1Y3QgWCB7Ci0gIGludCBmb28oaW50KTsKLX07PC9wcm9ncmFtbGlzdGluZz4KLQotICA8aW5mb3JtYWx0YWJsZT4KLSAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgICAgIDx0aGVhZD4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+UHJlZmVycmVkIHN5bnRheDwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5PlBvcnRhYmxlIHN5bnRheDwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgPC90aGVhZD4KLSAgICAgIDx0Ym9keT4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+Ci08cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubWVtX2Z1bi5jeHg5OCI+PGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7aW50IChYKiwgaW50KSZndDsgZjsKLQotZiA9ICZhbXA7WDo6Zm9vOwotICAKLVggeDsKLWYoJmFtcDt4LCA1KTs8L3Byb2dyYW1saXN0aW5nPgotPC9lbnRyeT4KLTxlbnRyeT4KLTxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5tZW1fZnVuLnBvcnRhYmxlIj48Y2xhc3NuYW1lIGFsdD0iZnVuY3Rpb25OIj5ib29zdDo6ZnVuY3Rpb24yPC9jbGFzc25hbWU+Jmx0O2ludCwgWCosIGludCZndDsgZjsKLQotZiA9ICZhbXA7WDo6Zm9vOwotICAKLVggeDsKLWYoJmFtcDt4LCA1KTs8L3Byb2dyYW1saXN0aW5nPgotPC9lbnRyeT4KLTwvcm93PgotPC90Ym9keT4KLTwvdGdyb3VwPgotPC9pbmZvcm1hbHRhYmxlPgotPC9wYXJhPgotCi08cGFyYT4gU2V2ZXJhbCBsaWJyYXJpZXMgZXhpc3QgdGhhdCBzdXBwb3J0IGFyZ3VtZW50IGJpbmRpbmcuIFRocmVlIHN1Y2ggbGlicmFyaWVzIGFyZSBzdW1tYXJpemVkIGJlbG93OgotPGl0ZW1pemVkbGlzdD4KLSAgPGxpc3RpdGVtPiA8cGFyYT48bGlicmFyeW5hbWU+QmluZDwvbGlicmFyeW5hbWU+LiBUaGlzIGxpYnJhcnkgYWxsb3dzIGJpbmRpbmcgb2YKLSAgYXJndW1lbnRzIGZvciBhbnkgZnVuY3Rpb24gb2JqZWN0LiBJdCBpcyBsaWdodHdlaWdodCBhbmQgdmVyeQotICBwb3J0YWJsZS48L3BhcmE+PC9saXN0aXRlbT4KLQotICA8bGlzdGl0ZW0+IDxwYXJhPlRoZSBDKysgU3RhbmRhcmQgbGlicmFyeS4gVXNpbmcKLSAgPGNvbXB1dGVyb3V0cHV0PnN0ZDo6YmluZDFzdDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+c3RkOjptZW1fZnVuPC9jb21wdXRlcm91dHB1dD4gdG9nZXRoZXIgb25lIGNhbiBiaW5kCi0gIHRoZSBvYmplY3Qgb2YgYSBwb2ludGVyLXRvLW1lbWJlciBmdW5jdGlvbiBmb3IgdXNlIHdpdGgKLSAgQm9vc3QuRnVuY3Rpb246Ci0KLSAgPGluZm9ybWFsdGFibGU+Ci0gICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8dGhlYWQ+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PlByZWZlcnJlZCBzeW50YXg8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT5Qb3J0YWJsZSBzeW50YXg8L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgIDwvdGhlYWQ+Ci0gICAgICA8dGJvZHk+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN0ZF9iaW5kLmN4eDk4Ij4gIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O2ludCAoaW50KSZndDsgZjsKLVggeDsKLWYgPSBzdGQ6OmJpbmQxc3QoCi0gICAgICBzdGQ6Om1lbV9mdW4oJmFtcDtYOjpmb28pLCAmYW1wO3gpOwotZig1KTsgLy8gQ2FsbCB4LmZvbyg1KTwvcHJvZ3JhbWxpc3Rpbmc+Ci08L2VudHJ5PgotPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN0ZF9iaW5kLnBvcnRhYmxlIj4gIDxjbGFzc25hbWUgYWx0PSJmdW5jdGlvbk4iPmJvb3N0OjpmdW5jdGlvbjE8L2NsYXNzbmFtZT4mbHQ7aW50LCBpbnQmZ3Q7IGY7Ci1YIHg7Ci1mID0gc3RkOjpiaW5kMXN0KAotICAgICAgc3RkOjptZW1fZnVuKCZhbXA7WDo6Zm9vKSwgJmFtcDt4KTsKLWYoNSk7IC8vIENhbGwgeC5mb28oNSk8L3Byb2dyYW1saXN0aW5nPgotPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgPC90Ym9keT4KLSAgICAgIDwvdGdyb3VwPgotICAgIDwvaW5mb3JtYWx0YWJsZT4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLSAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8bGlicmFyeW5hbWU+TGFtYmRhPC9saWJyYXJ5bmFtZT4gbGlicmFyeS4gVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGEgcG93ZXJmdWwgY29tcG9zaXRpb24gbWVjaGFuaXNtIHRvIGNvbnN0cnVjdCBmdW5jdGlvbiBvYmplY3RzIHRoYXQgdXNlcyB2ZXJ5IG5hdHVyYWwgQysrIHN5bnRheC4gTGFtYmRhIHJlcXVpcmVzIGEgY29tcGlsZXIgdGhhdCBpcyByZWFzb25hYmx5IGNvbmZvcm1hbnQgdG8gdGhlIEMrKyBzdGFuZGFyZC4gPC9wYXJhPjwvbGlzdGl0ZW0+Ci08L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLQotPC9zZWN0aW9uPgotCi08c2VjdGlvbj4KLSAgPHRpdGxlPlJlZmVyZW5jZXMgdG8gRnVuY3Rpb24gT2JqZWN0czwvdGl0bGU+IDxwYXJhPiBJbiBzb21lIGNhc2VzIGl0IGlzCi0gIGV4cGVuc2l2ZSAob3Igc2VtYW50aWNhbGx5IGluY29ycmVjdCkgdG8gaGF2ZSBCb29zdC5GdW5jdGlvbiBjbG9uZSBhCi0gIGZ1bmN0aW9uIG9iamVjdC4gSW4gc3VjaCBjYXNlcywgaXQgaXMgcG9zc2libGUgdG8gcmVxdWVzdCB0aGF0Ci0gIEJvb3N0LkZ1bmN0aW9uIGtlZXAgb25seSBhIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGZ1bmN0aW9uCi0gIG9iamVjdC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+cmVmPC9jb21wdXRlcm91dHB1dD4KLSAgYW5kIDxjb21wdXRlcm91dHB1dD5jcmVmPC9jb21wdXRlcm91dHB1dD4gZnVuY3Rpb25zIHRvIHdyYXAgYQotICByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiBvYmplY3Q6Ci0KLSAgPGluZm9ybWFsdGFibGU+Ci0gICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8dGhlYWQ+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PlByZWZlcnJlZCBzeW50YXg8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT5Qb3J0YWJsZSBzeW50YXg8L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgIDwvdGhlYWQ+Ci0gICAgICA8dGJvZHk+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnJlZi5jeHg5OCI+c3RhdGVmdWxfdHlwZSBhX2Z1bmN0aW9uX29iamVjdDsKLTxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O2ludCAoaW50KSZndDsgZjsKLWYgPSA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpyZWY8L2Z1bmN0aW9ubmFtZT4oYV9mdW5jdGlvbl9vYmplY3QpOwotCi08Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtpbnQgKGludCkmZ3Q7IGYyKGYpOzwvcHJvZ3JhbWxpc3Rpbmc+Ci08L2VudHJ5PgotPGVudHJ5PgotPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnJlZi5wb3J0YWJsZSI+c3RhdGVmdWxfdHlwZSBhX2Z1bmN0aW9uX29iamVjdDsKLTxjbGFzc25hbWUgYWx0PSJmdW5jdGlvbk4iPmJvb3N0OjpmdW5jdGlvbjE8L2NsYXNzbmFtZT4mbHQ7aW50LCBpbnQmZ3Q7IGY7Ci1mID0gPGZ1bmN0aW9ubmFtZT5ib29zdDo6cmVmPC9mdW5jdGlvbm5hbWU+KGFfZnVuY3Rpb25fb2JqZWN0KTsKLQotPGNsYXNzbmFtZSBhbHQ9ImZ1bmN0aW9uTiI+Ym9vc3Q6OmZ1bmN0aW9uMTwvY2xhc3NuYW1lPiZsdDtpbnQsIGludCZndDsgZjIoZik7PC9wcm9ncmFtbGlzdGluZz4KLTwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgIDwvdGJvZHk+Ci0gICAgICA8L3Rncm91cD4KLSAgICA8L2luZm9ybWFsdGFibGU+Ci08L3BhcmE+Ci0KLTxwYXJhPiBIZXJlLCA8Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgbm90IG1ha2UgYSBjb3B5Ci1vZiA8Y29tcHV0ZXJvdXRwdXQ+YV9mdW5jdGlvbl9vYmplY3Q8L2NvbXB1dGVyb3V0cHV0Piwgbm9yIHdpbGwKLTxjb21wdXRlcm91dHB1dD5mMjwvY29tcHV0ZXJvdXRwdXQ+IHdoZW4gaXQgaXMgdGFyZ2V0ZWQgdG8KLTxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD4ncyByZWZlcmVuY2UgdG8KLTxjb21wdXRlcm91dHB1dD5hX2Z1bmN0aW9uX29iamVjdDwvY29tcHV0ZXJvdXRwdXQ+LiBBZGRpdGlvbmFsbHksIHdoZW4KLXVzaW5nIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb24gb2JqZWN0cywgQm9vc3QuRnVuY3Rpb24gd2lsbCBub3QgdGhyb3cKLWV4Y2VwdGlvbnMgZHVyaW5nIGFzc2lnbm1lbnQgb3IgY29uc3RydWN0aW9uLgotPC9wYXJhPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbj4KLSAgPHRpdGxlPkNvbXBhcmluZyBCb29zdC5GdW5jdGlvbiBmdW5jdGlvbiBvYmplY3RzPC90aXRsZT4KLQotICA8cGFyYT5GdW5jdGlvbiBvYmplY3Qgd3JhcHBlcnMgY2FuIGJlIGNvbXBhcmVkIHZpYSA8Y29kZT49PTwvY29kZT4KLSAgb3IgPGNvZGU+IT08L2NvZGU+IGFnYWluc3QgYW55IGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbiBiZSBzdG9yZWQKLSAgd2l0aGluIHRoZSB3cmFwcGVyLiBJZiB0aGUgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXIgY29udGFpbnMgYQotICBmdW5jdGlvbiBvYmplY3Qgb2YgdGhhdCB0eXBlLCBpdCB3aWxsIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIGdpdmVuCi0gIGZ1bmN0aW9uIG9iamVjdCAod2hpY2ggbXVzdCBiZSBlaXRoZXIgYmUKLSAgPGNvbmNlcHRuYW1lPkVxdWFsaXR5Q29tcGFyYWJsZTwvY29uY2VwdG5hbWU+IG9yIGhhdmUgYW4gb3ZlcmxvYWRlZCA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpmdW5jdGlvbl9lcXVhbDwvZnVuY3Rpb25uYW1lPikuIEZvciBpbnN0YW5jZTo8L3BhcmE+Ci0gIAotICA8cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuY29tcGFyZSI+aW50IGNvbXB1dGVfd2l0aF9YKFgqLCBpbnQpOwotCi1mID0gJmFtcDtYOjpmb287Ci1hc3NlcnQoZiA9PSAmYW1wO1g6OmZvbyk7Ci1hc3NlcnQoJmFtcDtjb21wdXRlX3dpdGhfWCAhPSBmKTs8L3Byb2dyYW1saXN0aW5nPgotCi0gICA8cGFyYT5XaGVuIGNvbXBhcmluZyBhZ2FpbnN0IGFuIGluc3RhbmNlIG9mCi0gICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+PC9jb2RlPiwgdGhlIGFkZHJlc3MKLSAgIG9mIHRoZSBvYmplY3QgaW4gdGhlCi0gICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+PC9jb2RlPiBpcyBjb21wYXJlZAotICAgYWdhaW5zdCB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0IHN0b3JlZCBieSB0aGUgZnVuY3Rpb24gb2JqZWN0Ci0gICB3cmFwcGVyOjwvcGFyYT4KLQotICA8cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuY29tcGFyZS1yZWYiPmFfc3RhdGVmdWxfb2JqZWN0IHNvMSwgc28yOwotZiA9IDxmdW5jdGlvbm5hbWU+Ym9vc3Q6OnJlZjwvZnVuY3Rpb25uYW1lPihzbzEpOwotYXNzZXJ0KGYgPT0gPGZ1bmN0aW9ubmFtZT5ib29zdDo6cmVmPC9mdW5jdGlvbm5hbWU+KHNvMSkpOwotYXNzZXJ0KGYgPT0gc28xKTsgPGVtcGhhc2lzPi8vIE9ubHkgaWYgYV9zdGF0ZWZ1bF9vYmplY3QgaXMgPGNvbmNlcHRuYW1lPkVxdWFsaXR5Q29tcGFyYWJsZTwvY29uY2VwdG5hbWU+PC9lbXBoYXNpcz4KLWFzc2VydChmICE9IDxmdW5jdGlvbm5hbWU+Ym9vc3Q6OnJlZjwvZnVuY3Rpb25uYW1lPihzbzIpKTs8L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3Rpb24+Ci0KLTwvc2VjdGlvbj4KLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9leGFtcGxlL2JpbmQxc3QuY3BwIGIvbGlicy9mdW5jdGlvbi9leGFtcGxlL2JpbmQxc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGZjNjhhLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9iaW5kMXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkgZXhhbXBsZXMKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLQotc3RydWN0IFggewotICBYKGludCB2YWwpIDogdmFsdWUodmFsKSB7fQotCi0gIGludCBmb28oaW50IHgpIHsgcmV0dXJuIHggKiB2YWx1ZTsgfQotCi0gIGludCB2YWx1ZTsKLX07Ci0KLQotaW50Ci1tYWluKCkKLXsKLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoaW50KT4gZjsKLSAgWCB4KDcpOwotICBmID0gc3RkOjpiaW5kMXN0KHN0ZDo6bWVtX2Z1bigmWDo6Zm9vKSwgJngpOwotCi0gIHN0ZDo6Y291dCA8PCBmKDUpIDw8IHN0ZDo6ZW5kbDsgLy8gQ2FsbCB4LmZvbyg1KQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9pbnRfZGl2LmNwcCBiL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9pbnRfZGl2LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5MWY1Ni4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL2V4YW1wbGUvaW50X2Rpdi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5IGV4YW1wbGVzCi0KLS8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDAzLiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotCi1zdHJ1Y3QgaW50X2RpdiB7Ci0gIGZsb2F0IG9wZXJhdG9yKCkoaW50IHgsIGludCB5KSBjb25zdCB7IHJldHVybiAoKGZsb2F0KXgpL3k7IH07Ci19OwotCi1pbnQKLW1haW4oKQotewotICBuZG5ib29zdDo6ZnVuY3Rpb248ZmxvYXQgKGludCwgaW50KT4gZjsKLSAgZiA9IGludF9kaXYoKTsKLQotICBzdGQ6OmNvdXQgPDwgZig1LCAzKSA8PCBzdGQ6OmVuZGw7IC8vIDEuNjY2NjcKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9zdW1fYXZnLmNwcCBiL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9zdW1fYXZnLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4ZjM4MC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL2V4YW1wbGUvc3VtX2F2Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5IGV4YW1wbGVzCi0KLS8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDAzLiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotCi12b2lkIGRvX3N1bV9hdmcoaW50IHZhbHVlc1tdLCBpbnQgbiwgaW50JiBzdW0sIGZsb2F0JiBhdmcpCi17Ci0gIHN1bSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgIHN1bSArPSB2YWx1ZXNbaV07Ci0gIGF2ZyA9IChmbG9hdClzdW0gLyBuOwotfQotCi1pbnQKLW1haW4oKQotewotICAvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBzaG91bGQgYmUgaW50W10sIGJ1dCBzb21lIGNvbXBpbGVycyAoZS5nLiwgR0NDKQotICAvLyBjb21wbGFpbiBhYm91dCB0aGlzCi0gIG5kbmJvb3N0OjpmdW5jdGlvbjx2b2lkIChpbnQqLCBpbnQsIGludCYsIGZsb2F0Jik+IHN1bV9hdmc7Ci0KLSAgc3VtX2F2ZyA9ICZkb19zdW1fYXZnOwotCi0gIGludCB2YWx1ZXNbNV0gPSB7IDEsIDEsIDIsIDMsIDUgfTsKLSAgaW50IHN1bTsKLSAgZmxvYXQgYXZnOwotICBzdW1fYXZnKHZhbHVlcywgNSwgc3VtLCBhdmcpOwotCi0gIHN0ZDo6Y291dCA8PCAic3VtID0gIiA8PCBzdW0gPDwgc3RkOjplbmRsOwotICBzdGQ6OmNvdXQgPDwgImF2ZyA9ICIgPDwgYXZnIDw8IHN0ZDo6ZW5kbDsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZDQwZDIuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPGh0bWw+Ci08IS0tCi0gICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgotICAKLSAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLSAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAgLS0+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD0uLi8uLi9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIj4KLTwvaGVhZD4KLTxib2R5PgotQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgcGxlYXNlIGdvIHRvCi08YSBocmVmPSIuLi8uLi9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIj4uLi8uLi9kb2MvaHRtbC9mdW5jdGlvbi5odG1sPC9hPiAmbmJzcDs8aHI+Ci08cD6pIENvcHlyaWdodCBCZW1hbiBEYXdlcywgMjAwMTwvcD4KLTxwPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgCi1maWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvciBjb3B5IAotYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGRmZTMuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jIEZ1bmN0aW9uIGxpYnJhcnkKLQotIyBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDAzLiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLSMgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLSMgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLwotCi1wcm9qZWN0Ci0gICAgOiByZXF1aXJlbWVudHMgPHRvb2xzZXQ+bXN2Yzo8YXN5bmNoLWV4Y2VwdGlvbnM+b24KLSAgICA6IHNvdXJjZS1sb2NhdGlvbiAkKEJPT1NUX1JPT1QpCi0gICAgOwotCi0jIGJyaW5nIGluIHJ1bGVzIGZvciB0ZXN0aW5nCi1pbXBvcnQgdGVzdGluZyA7Ci0KLXsKLQotICB0ZXN0LXN1aXRlIGZ1bmN0aW9uCi0gICAgOiAKLSAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwIDogIDogIDogIDogbGliX2Z1bmN0aW9uX3Rlc3QgXQotCi0gIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9uX3Rlc3QuY3BwIDogIDogIDogIDogIF0KLQotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvYWxsb2NhdG9yX3Rlc3QuY3BwIC4uLy4uLy4uL2xpYnMvdGVzdC9idWlsZC8vbmRuYm9vc3RfdGVzdF9leGVjX21vbml0b3IgOiAgOiAgOiAgOiAgXQotCi0gIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9zdGF0ZWxlc3NfdGVzdC5jcHAgLi4vLi4vLi4vbGlicy90ZXN0L2J1aWxkLy9uZG5ib29zdF90ZXN0X2V4ZWNfbW9uaXRvciA6ICA6ICA6ICA6ICBdCi0KLSAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L2xhbWJkYV90ZXN0LmNwcCAuLi8uLi8uLi9saWJzL3Rlc3QvYnVpbGQvL25kbmJvb3N0X3Rlc3RfZXhlY19tb25pdG9yIDogIDogIDogIDogIF0KLQotICBbIGNvbXBpbGUtZmFpbCBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdF9mYWlsMS5jcHAgOiAgOiAgOiAgOiAgXQotCi0gIFsgY29tcGlsZS1mYWlsIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwyLmNwcCA6ICA6ICA6ICA6ICBdCi0KLSAgWyBjb21waWxlIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl8zMC5jcHAgOiAgOiAgOiAgOiAgXSAKLQotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfY3h4OTguY3BwIDogIDogIDogIDogIF0KLQotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfcG9ydGFibGUuY3BwIDogIDogIDogIDogIF0KLQotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3Qvc3VtX2F2Z19jeHg5OC5jcHAgOiAgOiAgOiAgOiAgXQotCi0gIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9zdW1fYXZnX3BvcnRhYmxlLmNwcCA6ICA6ICA6ICA6ICBdCi0KLSAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L21lbV9mdW5fY3h4OTguY3BwIDogIDogIDogIDogIF0KLQotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9wb3J0YWJsZS5jcHAgOiAgOiAgOiAgOiAgXQotCi0gIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9jeHg5OC5jcHAgOiAgOiAgOiAgOiAgXQotCi0gIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9wb3J0YWJsZS5jcHAgOiAgOiAgOiAgOiAgXQotCi0gIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9yZWZfY3h4OTguY3BwIDogIDogIDogIDogIF0KLQotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fcmVmX3BvcnRhYmxlLmNwcCA6ICA6ICA6ICA6ICBdCi0gIAotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvY29udGFpbnNfdGVzdC5jcHAgOiA6IDogOiBdCi0gICAKLSAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L2NvbnRhaW5zMl90ZXN0LmNwcCA6IDogOiA6IF0KLSAgIAotICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3Qvbm90aHJvd19zd2FwLmNwcCA6ICA6ICA6ICA6ICBdCi0KLSAgWyBjb21waWxlIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90eXBlb2ZfdGVzdC5jcHAgXQotIDsKLX0KLSAgICAgIApkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2FsbG9jYXRvcl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9hbGxvY2F0b3JfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlOTFlNmIuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L2FsbG9jYXRvcl90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5Ci0KLS8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDAzLiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIG5kbmJvb3N0OwotCi1zdGF0aWMgaW50IGFsbG9jX2NvdW50ID0gMDsKLXN0YXRpYyBpbnQgZGVhbGxvY19jb3VudCA9IDA7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgY291bnRpbmdfYWxsb2NhdG9yIDogcHVibGljIHN0ZDo6YWxsb2NhdG9yPFQ+Ci17Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gIHN0cnVjdCByZWJpbmQKLSAgewotICAgIHR5cGVkZWYgY291bnRpbmdfYWxsb2NhdG9yPFU+IG90aGVyOwotICB9OwotCi0gIGNvdW50aW5nX2FsbG9jYXRvcigpCi0gIHsKLSAgfQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gIGNvdW50aW5nX2FsbG9jYXRvciggY291bnRpbmdfYWxsb2NhdG9yPFU+ICkKLSAgewotICB9Ci0KLSAgVCogYWxsb2NhdGUoc3RkOjpzaXplX3QgbikKLSAgewotICAgIGFsbG9jX2NvdW50Kys7Ci0gICAgcmV0dXJuIHN0ZDo6YWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShuKTsKLSAgfQotCi0gIHZvaWQgZGVhbGxvY2F0ZShUKiBwLCBzdGQ6OnNpemVfdCBuKQotICB7Ci0gICAgZGVhbGxvY19jb3VudCsrOwotICAgIHN0ZDo6YWxsb2NhdG9yPFQ+OjpkZWFsbG9jYXRlKHAsIG4pOwotICB9Ci19OwotCi1zdHJ1Y3QgZW5hYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24KLXsKLX07Ci0KLXN0cnVjdCBkaXNhYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24KLXsKLSAgaW50IHVudXNlZF9zdGF0ZV9kYXRhWzMyXTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBiYXNlPgotc3RydWN0IHBsdXNfaW50OiBiYXNlCi17Ci0gIGludCBvcGVyYXRvcigpKGludCB4LCBpbnQgeSkgY29uc3QgeyByZXR1cm4geCArIHk7IH0KLX07Ci0KLXN0YXRpYyBpbnQgZG9fbWludXMoaW50IHgsIGludCB5KSB7IHJldHVybiB4LXk7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIGJhc2U+Ci1zdHJ1Y3QgRG9Ob3RoaW5nOiBiYXNlCi17Ci0gIHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0IHt9Ci19OwotCi1zdGF0aWMgdm9pZCBkb19ub3RoaW5nKCkge30KLQotaW50Ci10ZXN0X21haW4oaW50LCBjaGFyKltdKQotewotICBmdW5jdGlvbjI8aW50LCBpbnQsIGludD4gZjsKLSAgZi5hc3NpZ24oIHBsdXNfaW50PGRpc2FibGVfc21hbGxfb2JqZWN0X29wdGltaXphdGlvbj4oKSwgY291bnRpbmdfYWxsb2NhdG9yPGludD4oKSApOwotICBmLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKGFsbG9jX2NvdW50ID09IDEpOwotICBCT09TVF9DSEVDSyhkZWFsbG9jX2NvdW50ID09IDEpOwotICBhbGxvY19jb3VudCA9IDA7Ci0gIGRlYWxsb2NfY291bnQgPSAwOwotICBmLmFzc2lnbiggcGx1c19pbnQ8ZW5hYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24+KCksIGNvdW50aW5nX2FsbG9jYXRvcjxpbnQ+KCkgKTsKLSAgZi5jbGVhcigpOwotICBCT09TVF9DSEVDSyhhbGxvY19jb3VudCA9PSAwKTsKLSAgQk9PU1RfQ0hFQ0soZGVhbGxvY19jb3VudCA9PSAwKTsKLSAgZi5hc3NpZ24oIHBsdXNfaW50PGRpc2FibGVfc21hbGxfb2JqZWN0X29wdGltaXphdGlvbj4oKSwgc3RkOjphbGxvY2F0b3I8aW50PigpICk7Ci0gIGYuY2xlYXIoKTsKLSAgZi5hc3NpZ24oIHBsdXNfaW50PGVuYWJsZV9zbWFsbF9vYmplY3Rfb3B0aW1pemF0aW9uPigpLCBzdGQ6OmFsbG9jYXRvcjxpbnQ+KCkgKTsKLSAgZi5jbGVhcigpOwotCi0gIGFsbG9jX2NvdW50ID0gMDsKLSAgZGVhbGxvY19jb3VudCA9IDA7Ci0gIGYuYXNzaWduKCAmZG9fbWludXMsIGNvdW50aW5nX2FsbG9jYXRvcjxpbnQ+KCkgKTsKLSAgZi5jbGVhcigpOwotICBCT09TVF9DSEVDSyhhbGxvY19jb3VudCA9PSAwKTsKLSAgQk9PU1RfQ0hFQ0soZGVhbGxvY19jb3VudCA9PSAwKTsKLSAgZi5hc3NpZ24oICZkb19taW51cywgc3RkOjphbGxvY2F0b3I8aW50PigpICk7Ci0gIGYuY2xlYXIoKTsKLQotICBmdW5jdGlvbjA8dm9pZD4gZnY7Ci0gIGFsbG9jX2NvdW50ID0gMDsKLSAgZGVhbGxvY19jb3VudCA9IDA7Ci0gIGZ2LmFzc2lnbiggRG9Ob3RoaW5nPGRpc2FibGVfc21hbGxfb2JqZWN0X29wdGltaXphdGlvbj4oKSwgY291bnRpbmdfYWxsb2NhdG9yPGludD4oKSApOwotICBmdi5jbGVhcigpOwotICBCT09TVF9DSEVDSyhhbGxvY19jb3VudCA9PSAxKTsKLSAgQk9PU1RfQ0hFQ0soZGVhbGxvY19jb3VudCA9PSAxKTsKLSAgYWxsb2NfY291bnQgPSAwOwotICBkZWFsbG9jX2NvdW50ID0gMDsKLSAgZnYuYXNzaWduKCBEb05vdGhpbmc8ZW5hYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24+KCksIGNvdW50aW5nX2FsbG9jYXRvcjxpbnQ+KCkgKTsKLSAgZnYuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0soYWxsb2NfY291bnQgPT0gMCk7Ci0gIEJPT1NUX0NIRUNLKGRlYWxsb2NfY291bnQgPT0gMCk7Ci0gIGZ2LmFzc2lnbiggRG9Ob3RoaW5nPGRpc2FibGVfc21hbGxfb2JqZWN0X29wdGltaXphdGlvbj4oKSwgc3RkOjphbGxvY2F0b3I8aW50PigpICk7Ci0gIGZ2LmNsZWFyKCk7Ci0gIGZ2LmFzc2lnbiggRG9Ob3RoaW5nPGVuYWJsZV9zbWFsbF9vYmplY3Rfb3B0aW1pemF0aW9uPigpLCBzdGQ6OmFsbG9jYXRvcjxpbnQ+KCkgKTsKLSAgZnYuY2xlYXIoKTsKLQotICBhbGxvY19jb3VudCA9IDA7Ci0gIGRlYWxsb2NfY291bnQgPSAwOwotICBmdi5hc3NpZ24oICZkb19ub3RoaW5nLCBjb3VudGluZ19hbGxvY2F0b3I8aW50PigpICk7Ci0gIGZ2LmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKGFsbG9jX2NvdW50ID09IDApOwotICBCT09TVF9DSEVDSyhkZWFsbG9jX2NvdW50ID09IDApOwotICBmdi5hc3NpZ24oICZkb19ub3RoaW5nLCBzdGQ6OmFsbG9jYXRvcjxpbnQ+KCkgKTsKLSAgZnYuY2xlYXIoKTsKLSAgCi0gIGZ1bmN0aW9uMDx2b2lkPiBmdjI7Ci0gIGZ2LmFzc2lnbigmZG9fbm90aGluZywgc3RkOjphbGxvY2F0b3I8aW50PigpICk7Ci0gIGZ2Mi5hc3NpZ24oZnYsIHN0ZDo6YWxsb2NhdG9yPGludD4oKSApOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2NvbnRhaW5zMl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluczJfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjdlYjguLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L2NvbnRhaW5zMl90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDA0LgotLy8gIENvcHlyaWdodCAyMDA1IFBldGVyIERpbW92Ci0KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8KLS8vICB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLXN0YXRpYyBpbnQgZm9ydHlfdHdvKCkKLXsKLSAgICByZXR1cm4gNDI7Ci19Ci0KLXN0cnVjdCBTZXZlbnRlZW4KLXsKLSAgICBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gMTc7Ci0gICAgfQotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNldmVudGVlbiYsIGNvbnN0IFNldmVudGVlbiYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBSZXR1cm5JbnQKLXsKLSAgICBleHBsaWNpdCBSZXR1cm5JbnQoaW50IHZhbHVlKSA6IHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgaW50IHZhbHVlOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJldHVybkludCYgeCwgY29uc3QgUmV0dXJuSW50JiB5KQotewotICAgIHJldHVybiB4LnZhbHVlID09IHkudmFsdWU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXR1cm5JbnQmIHgsIGNvbnN0IFJldHVybkludCYgeSkKLXsKLSAgICByZXR1cm4geC52YWx1ZSAhPSB5LnZhbHVlOwotfQotCi1pbnQgbWFpbigpCi17Ci0gICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxpbnQ+IGZuOwotCi0gICAgZm4gPSAmZm9ydHlfdHdvOwotCi0gICAgQk9PU1RfVEVTVCggZm4oKSA9PSA0MiApOwotCi0gICAgQk9PU1RfVEVTVCggZm4uY29udGFpbnMoJmZvcnR5X3R3bykgKTsKLSAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoIFNldmVudGVlbigpICkgKTsKLSAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoIFJldHVybkludCgwKSApICk7Ci0gICAgQk9PU1RfVEVTVCggIWZuLmNvbnRhaW5zKCBSZXR1cm5JbnQoMTIpICkgKTsKLQotICAgIGZuID0gU2V2ZW50ZWVuKCk7Ci0KLSAgICBCT09TVF9URVNUKCBmbigpID09IDE3ICk7Ci0KLSAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoICZmb3J0eV90d28gKSApOwotICAgIEJPT1NUX1RFU1QoIGZuLmNvbnRhaW5zKCBTZXZlbnRlZW4oKSApICk7Ci0gICAgQk9PU1RfVEVTVCggIWZuLmNvbnRhaW5zKCBSZXR1cm5JbnQoMCkgKSApOwotICAgIEJPT1NUX1RFU1QoICFmbi5jb250YWlucyggUmV0dXJuSW50KDEyKSApICk7Ci0KLSAgICBmbiA9IFJldHVybkludCgxMik7Ci0KLSAgICBCT09TVF9URVNUKCBmbigpID09IDEyICk7Ci0KLSAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoICZmb3J0eV90d28gKSApOwotICAgIEJPT1NUX1RFU1QoICFmbi5jb250YWlucyggU2V2ZW50ZWVuKCkgKSApOwotICAgIEJPT1NUX1RFU1QoICFmbi5jb250YWlucyggUmV0dXJuSW50KDApICkgKTsKLSAgICBCT09TVF9URVNUKCBmbi5jb250YWlucyggUmV0dXJuSW50KDEyKSApICk7Ci0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluc190ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluc190ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZlYTcxNi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3QvY29udGFpbnNfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLy8gQm9vc3QuRnVuY3Rpb24gbGlicmFyeQotCi0vLyAgQ29weXJpZ2h0IERvdWdsYXMgR3JlZ29yIDIwMDQuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmVmLmhwcD4KLQotc3RhdGljIGludCBmb3J0eV90d28oKSB7IHJldHVybiA0MjsgfQotCi1zdHJ1Y3QgU2V2ZW50ZWVuCi17Ci0gIGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gMTc7IH0KLX07Ci0KLXN0cnVjdCBSZXR1cm5JbnQKLXsKLSAgZXhwbGljaXQgUmV0dXJuSW50KGludCB2YWx1ZSkgOiB2YWx1ZSh2YWx1ZSkge30KLQotICBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlOyB9Ci0KLSAgaW50IHZhbHVlOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJldHVybkludCYgeCwgY29uc3QgUmV0dXJuSW50JiB5KQoteyByZXR1cm4geC52YWx1ZSA9PSB5LnZhbHVlOyB9Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXR1cm5JbnQmIHgsIGNvbnN0IFJldHVybkludCYgeSkKLXsgcmV0dXJuIHgudmFsdWUgIT0geS52YWx1ZTsgfQotCi1uYW1lc3BhY2UgY29udGFpbl90ZXN0IHsKLQotc3RydWN0IFJldHVybkludEZFCi17Ci0gIGV4cGxpY2l0IFJldHVybkludEZFKGludCB2YWx1ZSkgOiB2YWx1ZSh2YWx1ZSkge30KLQotICBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlOyB9Ci0KLSAgaW50IHZhbHVlOwotfTsKLQotfQotCi0jaWZuZGVmIEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVAKLQotbmFtZXNwYWNlIGNvbnRhaW5fdGVzdCB7Ci0jIGlmbmRlZiBCT09TVF9OT19GVU5DVElPTl9URU1QTEFURV9PUkRFUklORwotYm9vbCBmdW5jdGlvbl9lcXVhbChjb25zdCBSZXR1cm5JbnRGRSYgeCwgY29uc3QgUmV0dXJuSW50RkUmIHkpCi17IHJldHVybiB4LnZhbHVlID09IHkudmFsdWU7IH0KLSMgZWxzZQotYm9vbCBmdW5jdGlvbl9lcXVhbF9pbXBsKGNvbnN0IFJldHVybkludEZFJiB4LCBjb25zdCBSZXR1cm5JbnRGRSYgeSwgaW50KQoteyByZXR1cm4geC52YWx1ZSA9PSB5LnZhbHVlOyB9Ci0jIGVuZGlmIC8vICNpZm5kZWYgQk9PU1RfTk9fRlVOQ1RJT05fVEVNUExBVEVfT1JERVJJTkcKLX0KLSNlbHNlIC8vIEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVAKLW5hbWVzcGFjZSBuZG5ib29zdCB7Ci0jIGlmbmRlZiBCT09TVF9OT19GVU5DVElPTl9URU1QTEFURV9PUkRFUklORwotYm9vbCAKLWZ1bmN0aW9uX2VxdWFsKGNvbnN0IGNvbnRhaW5fdGVzdDo6UmV0dXJuSW50RkUmIHgsIAotICAgICAgICAgICAgICAgY29uc3QgY29udGFpbl90ZXN0OjpSZXR1cm5JbnRGRSYgeSkKLXsgcmV0dXJuIHgudmFsdWUgPT0geS52YWx1ZTsgfQotIyBlbHNlCi1ib29sIAotZnVuY3Rpb25fZXF1YWxfaW1wbChjb25zdCBjb250YWluX3Rlc3Q6OlJldHVybkludEZFJiB4LCAKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbl90ZXN0OjpSZXR1cm5JbnRGRSYgeSwgaW50KQoteyByZXR1cm4geC52YWx1ZSA9PSB5LnZhbHVlOyB9Ci0jIGVuZGlmCi19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgdGFyZ2V0X3Rlc3QoKQotewotICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZjsKLQotICBmID0gJmZvcnR5X3R3bzsKLSAgQk9PU1RfQ0hFQ0soKmYudGFyZ2V0PGludCAoKikoKT4oKSA9PSAmZm9ydHlfdHdvKTsKLSAgQk9PU1RfQ0hFQ0soIWYudGFyZ2V0PFNldmVudGVlbj4oKSk7Ci0KLSAgZiA9IFNldmVudGVlbigpOwotICBCT09TVF9DSEVDSyghZi50YXJnZXQ8aW50ICgqKSgpPigpKTsKLSAgQk9PU1RfQ0hFQ0soZi50YXJnZXQ8U2V2ZW50ZWVuPigpKTsKLQotICBTZXZlbnRlZW4gdGhpc19zZXZlbnRlZW47Ci0gIGYgPSBuZG5ib29zdDo6cmVmKHRoaXNfc2V2ZW50ZWVuKTsKLSAgQk9PU1RfQ0hFQ0soIWYudGFyZ2V0PGludCAoKikoKT4oKSk7Ci0gIEJPT1NUX0NIRUNLKGYudGFyZ2V0PFNldmVudGVlbj4oKSk7Ci0gIEJPT1NUX0NIRUNLKGYudGFyZ2V0PFNldmVudGVlbj4oKSA9PSAmdGhpc19zZXZlbnRlZW4pOwotCi0gIGNvbnN0IFNldmVudGVlbiBjb25zdF9zZXZlbnRlZW4gPSB0aGlzX3NldmVudGVlbjsKLSAgZiA9IG5kbmJvb3N0OjpyZWYoY29uc3Rfc2V2ZW50ZWVuKTsKLSAgQk9PU1RfQ0hFQ0soIWYudGFyZ2V0PGludCAoKikoKT4oKSk7Ci0gIEJPT1NUX0NIRUNLKGYudGFyZ2V0PGNvbnN0IFNldmVudGVlbj4oKSk7Ci0gIEJPT1NUX0NIRUNLKGYudGFyZ2V0PGNvbnN0IFNldmVudGVlbj4oKSA9PSAmY29uc3Rfc2V2ZW50ZWVuKTsKLSAgQk9PU1RfQ0hFQ0soZi50YXJnZXQ8Y29uc3Qgdm9sYXRpbGUgU2V2ZW50ZWVuPigpKTsKLSAgQk9PU1RfQ0hFQ0soIWYudGFyZ2V0PFNldmVudGVlbj4oKSk7Ci0gIEJPT1NUX0NIRUNLKCFmLnRhcmdldDx2b2xhdGlsZSBTZXZlbnRlZW4+KCkpOwotfQotCi1zdGF0aWMgdm9pZCBlcXVhbF90ZXN0KCkKLXsKLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxpbnQ+IGY7Ci0KLSAgZiA9ICZmb3J0eV90d287Ci0gIEJPT1NUX0NIRUNLKGYgPT0gJmZvcnR5X3R3byk7Ci0gIEJPT1NUX0NIRUNLKGYgIT0gUmV0dXJuSW50KDE3KSk7Ci0jaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCi0gIEJPT1NUX0NIRUNLKCZmb3J0eV90d28gPT0gZik7Ci0gIEJPT1NUX0NIRUNLKFJldHVybkludCgxNykgIT0gZik7Ci0jZW5kaWYKLQotICBCT09TVF9DSEVDSyhmLmNvbnRhaW5zKCZmb3J0eV90d28pKTsKLQotICBmID0gUmV0dXJuSW50KDE3KTsKLSAgQk9PU1RfQ0hFQ0soZiAhPSAmZm9ydHlfdHdvKTsKLSAgQk9PU1RfQ0hFQ0soZiA9PSBSZXR1cm5JbnQoMTcpKTsKLSAgQk9PU1RfQ0hFQ0soZiAhPSBSZXR1cm5JbnQoMTYpKTsKLSNpZiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPD0gMykKLSAgQk9PU1RfQ0hFQ0soJmZvcnR5X3R3byAhPSBmKTsKLSAgQk9PU1RfQ0hFQ0soUmV0dXJuSW50KDE3KSA9PSBmKTsKLSAgQk9PU1RfQ0hFQ0soUmV0dXJuSW50KDE2KSAhPSBmKTsKLSNlbmRpZgotCi0gIEJPT1NUX0NIRUNLKGYuY29udGFpbnMoUmV0dXJuSW50KDE3KSkpOwotCi0gIGYgPSBjb250YWluX3Rlc3Q6OlJldHVybkludEZFKDE3KTsKLSAgQk9PU1RfQ0hFQ0soZiAhPSAmZm9ydHlfdHdvKTsKLSAgQk9PU1RfQ0hFQ0soZiA9PSBjb250YWluX3Rlc3Q6OlJldHVybkludEZFKDE3KSk7Ci0gIEJPT1NUX0NIRUNLKGYgIT0gY29udGFpbl90ZXN0OjpSZXR1cm5JbnRGRSgxNikpOwotI2lmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8PSAzKQotICBCT09TVF9DSEVDSygmZm9ydHlfdHdvICE9IGYpOwotICBCT09TVF9DSEVDSyhjb250YWluX3Rlc3Q6OlJldHVybkludEZFKDE3KSA9PSBmKTsKLSAgQk9PU1RfQ0hFQ0soY29udGFpbl90ZXN0OjpSZXR1cm5JbnRGRSgxNikgIT0gZik7Ci0jZW5kaWYKLQotICBCT09TVF9DSEVDSyhmLmNvbnRhaW5zKGNvbnRhaW5fdGVzdDo6UmV0dXJuSW50RkUoMTcpKSk7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9GVU5DVElPTl9OT19GVU5DVElPTl9UWVBFX1NZTlRBWCkKLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCh2b2lkKT4gZzsKLQotICBnID0gJmZvcnR5X3R3bzsKLSAgQk9PU1RfQ0hFQ0soZyA9PSAmZm9ydHlfdHdvKTsKLSAgQk9PU1RfQ0hFQ0soZyAhPSBSZXR1cm5JbnQoMTcpKTsKLSMgIGlmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8PSAzKQotICBCT09TVF9DSEVDSygmZm9ydHlfdHdvID09IGcpOwotICBCT09TVF9DSEVDSyhSZXR1cm5JbnQoMTcpICE9IGcpOwotIyAgZW5kaWYKLQotICBnID0gUmV0dXJuSW50KDE3KTsKLSAgQk9PU1RfQ0hFQ0soZyAhPSAmZm9ydHlfdHdvKTsKLSAgQk9PU1RfQ0hFQ0soZyA9PSBSZXR1cm5JbnQoMTcpKTsKLSAgQk9PU1RfQ0hFQ0soZyAhPSBSZXR1cm5JbnQoMTYpKTsKLSMgIGlmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8PSAzKQotICBCT09TVF9DSEVDSygmZm9ydHlfdHdvICE9IGcpOwotICBCT09TVF9DSEVDSyhSZXR1cm5JbnQoMTcpID09IGcpOwotICBCT09TVF9DSEVDSyhSZXR1cm5JbnQoMTYpICE9IGcpOwotIyAgZW5kaWYKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCByZWZfZXF1YWxfdGVzdCgpCi17Ci0gIHsKLSAgICBSZXR1cm5JbnQgcmkoMTcpOwotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjA8aW50PiBmID0gbmRuYm9vc3Q6OnJlZihyaSk7Ci0KLSAgICAvLyBSZWZlcmVuY2VzIGFuZCB2YWx1ZXMgYXJlIGVxdWFsCi0gICAgQk9PU1RfQ0hFQ0soZiA9PSBuZG5ib29zdDo6cmVmKHJpKSk7Ci0gICAgQk9PU1RfQ0hFQ0soZiA9PSByaSk7Ci0gICAgQk9PU1RfQ0hFQ0sobmRuYm9vc3Q6OnJlZihyaSkgPT0gZik7Ci0gICAgQk9PU1RfQ0hFQ0soIShmICE9IG5kbmJvb3N0OjpyZWYocmkpKSk7Ci0gICAgQk9PU1RfQ0hFQ0soIShmICE9IHJpKSk7Ci0gICAgQk9PU1RfQ0hFQ0soIShuZG5ib29zdDo6cmVmKHJpKSAhPSBmKSk7Ci0jaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCi0gICAgQk9PU1RfQ0hFQ0socmkgPT0gZik7Ci0gICAgQk9PU1RfQ0hFQ0soIShyaSAhPSBmKSk7Ci0jZW5kaWYKLQotICAgIC8vIFZhbHVlcyBlcXVhbCwgcmVmZXJlbmNlcyBpbmVxdWFsCi0gICAgUmV0dXJuSW50IHJpMigxNyk7Ci0gICAgQk9PU1RfQ0hFQ0soZiA9PSByaTIpOwotICAgIEJPT1NUX0NIRUNLKGYgIT0gbmRuYm9vc3Q6OnJlZihyaTIpKTsKLSAgICBCT09TVF9DSEVDSyhuZG5ib29zdDo6cmVmKHJpMikgIT0gZik7Ci0gICAgQk9PU1RfQ0hFQ0soIShmICE9IHJpMikpOwotICAgIEJPT1NUX0NIRUNLKCEoZiA9PSBuZG5ib29zdDo6cmVmKHJpMikpKTsKLSAgICBCT09TVF9DSEVDSyghKG5kbmJvb3N0OjpyZWYocmkyKSA9PSBmKSk7Ci0jaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCi0gICAgQk9PU1RfQ0hFQ0socmkyID09IGYpOwotICAgIEJPT1NUX0NIRUNLKCEocmkyICE9IGYpKTsKLSNlbmRpZiAKLSAgfQotCi0jaWYgIWRlZmluZWQoQk9PU1RfRlVOQ1RJT05fTk9fRlVOQ1RJT05fVFlQRV9TWU5UQVgpCi0gIHsKLSAgICBSZXR1cm5JbnQgcmkoMTcpOwotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQodm9pZCk+IGYgPSBuZG5ib29zdDo6cmVmKHJpKTsKLQotICAgIC8vIFJlZmVyZW5jZXMgYW5kIHZhbHVlcyBhcmUgZXF1YWwKLSAgICBCT09TVF9DSEVDSyhmID09IG5kbmJvb3N0OjpyZWYocmkpKTsKLSAgICBCT09TVF9DSEVDSyhmID09IHJpKTsKLSAgICBCT09TVF9DSEVDSyhuZG5ib29zdDo6cmVmKHJpKSA9PSBmKTsKLSAgICBCT09TVF9DSEVDSyghKGYgIT0gbmRuYm9vc3Q6OnJlZihyaSkpKTsKLSAgICBCT09TVF9DSEVDSyghKGYgIT0gcmkpKTsKLSAgICBCT09TVF9DSEVDSyghKG5kbmJvb3N0OjpyZWYocmkpICE9IGYpKTsKLSMgIGlmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8PSAzKQotICAgIEJPT1NUX0NIRUNLKHJpID09IGYpOwotICAgIEJPT1NUX0NIRUNLKCEocmkgIT0gZikpOwotIyAgZW5kaWYKLQotICAgIC8vIFZhbHVlcyBlcXVhbCwgcmVmZXJlbmNlcyBpbmVxdWFsCi0gICAgUmV0dXJuSW50IHJpMigxNyk7Ci0gICAgQk9PU1RfQ0hFQ0soZiA9PSByaTIpOwotICAgIEJPT1NUX0NIRUNLKGYgIT0gbmRuYm9vc3Q6OnJlZihyaTIpKTsKLSAgICBCT09TVF9DSEVDSyhuZG5ib29zdDo6cmVmKHJpMikgIT0gZik7Ci0gICAgQk9PU1RfQ0hFQ0soIShmICE9IHJpMikpOwotICAgIEJPT1NUX0NIRUNLKCEoZiA9PSBuZG5ib29zdDo6cmVmKHJpMikpKTsKLSAgICBCT09TVF9DSEVDSyghKG5kbmJvb3N0OjpyZWYocmkyKSA9PSBmKSk7Ci0jICBpZiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPD0gMykKLSAgICBCT09TVF9DSEVDSyhyaTIgPT0gZik7Ci0gICAgQk9PU1RfQ0hFQ0soIShyaTIgIT0gZikpOwotIyAgZW5kaWYKLSAgfQotI2VuZGlmCi19Ci0KLWludCB0ZXN0X21haW4oaW50LCBjaGFyKltdKQotewotICB0YXJnZXRfdGVzdCgpOwotICBlcXVhbF90ZXN0KCk7Ci0gIHJlZl9lcXVhbF90ZXN0KCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fMzAuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uXzMwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4YjQyNS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fMzAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLy8gQm9vc3QuRnVuY3Rpb24gbGlicmFyeQotCi0vLyAgQ29weXJpZ2h0IERvdWdsYXMgR3JlZ29yIDIwMDItMjAwMy4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLS8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcKLQotLy8gTWFrZSBzdXJlIHdlIGRvbid0IHRyeSB0byByZWRlZmluZSBmdW5jdGlvbjIKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi9mdW5jdGlvbjIuaHBwPgotCi0vLyBEZWZpbmUgYWxsIEJvb3N0LkZ1bmN0aW9uIGNsYXNzIHRlbXBsYXRlcyB1cCB0byAzMCBhcmd1bWVudHMKLSNkZWZpbmUgQk9PU1RfRlVOQ1RJT05fTUFYX0FSR1MgMzAKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0KLWludCBtYWluKCkKLXsKLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxmbG9hdD4gZjA7Ci0KLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uMzA8ZmxvYXQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKLSAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LAotICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQ+IGYzMDsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfY3h4OTguY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX2FyaXRoX2N4eDk4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VmMWYwOS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfY3h4OTguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8gRnVuY3Rpb24gbGlicmFyeQotCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgotCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLwotCi0gICAgCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0KLWZsb2F0IG11bF9pbnRzKGludCB4LCBpbnQgeSkgeyByZXR1cm4gKChmbG9hdCl4KSAqIHk7IH0KLXN0cnVjdCBpbnRfZGl2IHsgCi0gIGZsb2F0IG9wZXJhdG9yKCkoaW50IHgsIGludCB5KSBjb25zdCB7IHJldHVybiAoKGZsb2F0KXgpL3k7IH07IAotfTsKLQotaW50IG1haW4oKQotewotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjxmbG9hdCAoaW50IHgsIGludCB5KT4gZjsKLSAgICBmID0gaW50X2RpdigpOwotICAgIHN0ZDo6Y291dCA8PCBmKDUsIDMpIDw8IHN0ZDo6ZW5kbDsKLSAgICBpZiAoZikKLSAgc3RkOjpjb3V0IDw8IGYoNSwgMykgPDwgc3RkOjplbmRsOwotZWxzZQotICBzdGQ6OmNvdXQgPDwgImYgaGFzIG5vIHRhcmdldCwgc28gaXQgaXMgdW5zYWZlIHRvIGNhbGwiIDw8IHN0ZDo6ZW5kbDsKLSAgICBmID0gMDsKLSAgICBmID0gJm11bF9pbnRzOwotICAKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfcG9ydGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGViY2E1Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9wb3J0YWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vLyBGdW5jdGlvbiBsaWJyYXJ5Ci0KLS8vIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIERvdWdsYXMgR3JlZ29yCi0KLS8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgCi0KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvCi0KLSAgICAKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLWZsb2F0IG11bF9pbnRzKGludCB4LCBpbnQgeSkgeyByZXR1cm4gKChmbG9hdCl4KSAqIHk7IH0KLXN0cnVjdCBpbnRfZGl2IHsgCi0gIGZsb2F0IG9wZXJhdG9yKCkoaW50IHgsIGludCB5KSBjb25zdCB7IHJldHVybiAoKGZsb2F0KXgpL3k7IH07IAotfTsKLWludCBtYWluKCkKLXsKLSAgICBuZG5ib29zdDo6ZnVuY3Rpb24yPGZsb2F0LCBpbnQsIGludD4gZjsKLSAgICBmID0gaW50X2RpdigpOwotICAgIHN0ZDo6Y291dCA8PCBmKDUsIDMpIDw8IHN0ZDo6ZW5kbDsKLSAgICBpZiAoZikKLSAgc3RkOjpjb3V0IDw8IGYoNSwgMykgPDwgc3RkOjplbmRsOwotZWxzZQotICBzdGQ6OmNvdXQgPDwgImYgaGFzIG5vIHRhcmdldCwgc28gaXQgaXMgdW5zYWZlIHRvIGNhbGwiIDw8IHN0ZDo6ZW5kbDsKLSAgICBmID0gMDsKLSAgICBmID0gJm11bF9pbnRzOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fbl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9uX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWI0YmY5Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9uX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjk3ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCi0KLSNpbmNsdWRlIDxib29zdC90ZXN0L21pbmltYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi11c2luZyBuYW1lc3BhY2UgbmRuYm9vc3Q7Ci11c2luZyBzdGQ6OnN0cmluZzsKLXVzaW5nIHN0ZDo6bmVnYXRlOwotCi1pbnQgZ2xvYmFsX2ludDsKLQotc3RydWN0IHdyaXRlX2ZpdmVfb2JqIHsgdm9pZCBvcGVyYXRvcigpKCkgY29uc3QgeyBnbG9iYWxfaW50ID0gNTsgfSB9Owotc3RydWN0IHdyaXRlX3RocmVlX29iaiB7IGludCBvcGVyYXRvcigpKCkgY29uc3QgeyBnbG9iYWxfaW50ID0gMzsgcmV0dXJuIDc7IH19Owotc3RhdGljIHZvaWQgd3JpdGVfZml2ZSgpIHsgZ2xvYmFsX2ludCA9IDU7IH0KLXN0YXRpYyB2b2lkIHdyaXRlX3RocmVlKCkgeyBnbG9iYWxfaW50ID0gMzsgfQotc3RydWN0IGdlbmVyYXRlX2ZpdmVfb2JqIHsgaW50IG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiA1OyB9IH07Ci1zdHJ1Y3QgZ2VuZXJhdGVfdGhyZWVfb2JqIHsgaW50IG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiAzOyB9IH07Ci1zdGF0aWMgaW50IGdlbmVyYXRlX2ZpdmUoKSB7IHJldHVybiA1OyB9Ci1zdGF0aWMgaW50IGdlbmVyYXRlX3RocmVlKCkgeyByZXR1cm4gMzsgfQotc3RhdGljIHN0cmluZyBpZGVudGl0eV9zdHIoY29uc3Qgc3RyaW5nJiBzKSB7IHJldHVybiBzOyB9Ci1zdGF0aWMgc3RyaW5nIHN0cmluZ19jYXQoY29uc3Qgc3RyaW5nJiBzMSwgY29uc3Qgc3RyaW5nJiBzMikgeyByZXR1cm4gczErczI7IH0KLXN0YXRpYyBpbnQgc3VtX2ludHMoaW50IHgsIGludCB5KSB7IHJldHVybiB4K3k7IH0KLQotc3RydWN0IHdyaXRlX2NvbnN0XzFfbm9uY29uc3RfMgotewotICB2b2lkIG9wZXJhdG9yKCkoKSB7IGdsb2JhbF9pbnQgPSAyOyB9Ci0gIHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgZ2xvYmFsX2ludCA9IDE7IH0KLX07Ci0KLXN0cnVjdCBhZGRfdG9fb2JqCi17Ci0gIGFkZF90b19vYmooaW50IHYpIDogdmFsdWUodikge30KLQotICBpbnQgb3BlcmF0b3IoKShpbnQgeCkgY29uc3QgeyByZXR1cm4gdmFsdWUgKyB4OyB9Ci0KLSAgaW50IHZhbHVlOwotfTsKLQotc3RhdGljIHZvaWQKLXRlc3RfemVyb19hcmdzKCkKLXsKLSAgdHlwZWRlZiBmdW5jdGlvbjA8dm9pZD4gZnVuY192b2lkX3R5cGU7Ci0KLSAgd3JpdGVfZml2ZV9vYmogZml2ZSA9IHdyaXRlX2ZpdmVfb2JqKCk7IC8vIEluaXRpYWxpemF0aW9uIGZvciBCb3JsYW5kIEMrKyA1LjUKLSAgd3JpdGVfdGhyZWVfb2JqIHRocmVlID0gd3JpdGVfdGhyZWVfb2JqKCk7IC8vIERpdHRvCi0KLSAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rpb24KLSAgZnVuY192b2lkX3R5cGUgdjE7Ci0gIEJPT1NUX0NIRUNLKHYxLmVtcHR5KCkpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KLSAgdjEgPSBmaXZlOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyKCkgbWV0aG9kCi0gIHYxLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKCF2MSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgotICB2MSA9IHRocmVlOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbiBhbmQgc2VsZi1hc3NpZ25tZW50Ci0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSA9IHYxOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjEgPSBmaXZlOwotCi0gIC8vIEludm9jYXRpb24gYW5kIHNlbGYtYXNzaWdubWVudAotICBnbG9iYWxfaW50ID0gMDsKLSAgdjEgPSAodjEpOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyCi0gIHYxID0gMDsKLSAgQk9PU1RfQ0hFQ0sodjEuZW1wdHkoKSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2MSA9ICZ3cml0ZV9maXZlOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjEoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYxID0gJndyaXRlX3RocmVlOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjEoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ25tZW50Ci0gIHYxID0gZml2ZTsKLSAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYxKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2MSA9IHdyaXRlX3RocmVlOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjEoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBDb25zdHJ1Y3Rpb24gZnJvbSBhbm90aGVyIGZ1bmN0aW9uICh0aGF0IGlzIGVtcHR5KQotICB2MS5jbGVhcigpOwotICBmdW5jX3ZvaWRfdHlwZSB2Mih2MSk7Ci0gIEJPT1NUX0NIRUNLKCF2Mj8gdHJ1ZSA6IGZhbHNlKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCi0gIHYyID0gdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjIgPSAoZml2ZSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICB2Mi5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2Mi5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYyID0gKCZ3cml0ZV9maXZlKTsKLSAgQk9PU1RfQ0hFQ0sodjI/IHRydWUgOiBmYWxzZSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYyID0gJndyaXRlX3RocmVlOwotICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBTd2FwcGluZwotICB2MSA9IGZpdmU7Ci0gIHN3YXAodjEsIHYyKTsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLSAgdjEoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLSAgc3dhcCh2MSwgdjIpOwotICB2MS5jbGVhcigpOwotCi0gIC8vIEFzc2lnbm1lbnQKLSAgdjIgPSBmaXZlOwotICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYyID0gJndyaXRlX3RocmVlOwotICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgZnVuY3Rpb24gZnJvbSBhbiBlbXB0eSBmdW5jdGlvbgotICB2MiA9IHYxOwotICBCT09TVF9DSEVDSyh2Mi5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgZnVuY3Rpb24gZnJvbSBhIGZ1bmN0aW9uIHdpdGggYSBmdW5jdG9yCi0gIHYxID0gdGhyZWU7Ci0gIHYyID0gdjE7Ci0gIEJPT1NUX0NIRUNLKCF2MS5lbXB0eSgpKTsKLSAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYxKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0gIGdsb2JhbF9pbnQgPSAwOwotICB2MigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbiB0byBhIGZ1bmN0aW9uIGZyb20gYSBmdW5jdGlvbiB3aXRoIGEgZnVuY3Rpb24KLSAgdjIgPSAmd3JpdGVfZml2ZTsKLSAgdjEgPSB2MjsKLSAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOwotICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7Ci0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBDb25zdHJ1Y3QgYSBmdW5jdGlvbiBnaXZlbiBhbm90aGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSBmdW5jdGlvbgotICBmdW5jX3ZvaWRfdHlwZSB2Myh2MSk7Ci0KLSAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MygpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyKCkgbWV0aG9kCi0gIHYzLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKCF2Mz8gdHJ1ZSA6IGZhbHNlKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCi0gIHYzID0gdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MygpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjMgPSBmaXZlOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYzKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKQotICB2My5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2My5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYzID0gJndyaXRlX2ZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MygpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjMgPSAmd3JpdGVfdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MygpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQKLSAgdjMgPSBmaXZlOwotICBCT09TVF9DSEVDSyghdjMuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjMoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3Rpb24gY29udGFpbmluZyBhIGZ1bmN0b3IKLSAgZnVuY192b2lkX3R5cGUgdjQodjMpOwotCi0gIC8vIEludm9jYXRpb24gb2YgYSBmdW5jdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjQoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBjbGVhcigpIG1ldGhvZAotICB2NC5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2NC5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCi0gIHY0ID0gdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NCgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjQgPSBmaXZlOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY0KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKQotICB2NC5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2NC5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHY0ID0gJndyaXRlX2ZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NCgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjQgPSAmd3JpdGVfdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NCgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQKLSAgdjQgPSBmaXZlOwotICBCT09TVF9DSEVDSyghdjQuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjQoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3RvcgotICBmdW5jX3ZvaWRfdHlwZSB2NShmaXZlKTsKLQotICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY1KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKSBtZXRob2QKLSAgdjUuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0sodjUuZW1wdHkoKSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgotICB2NSA9IHRocmVlOwotICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjUoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCi0gIHY1ID0gZml2ZTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyKCkKLSAgdjUuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0sodjUuZW1wdHkoKSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2NSA9ICZ3cml0ZV9maXZlOwotICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjUoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHY1ID0gJndyaXRlX3RocmVlOwotICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjUoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ25tZW50Ci0gIHY1ID0gZml2ZTsKLSAgQk9PU1RfQ0hFQ0soIXY1LmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY1KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gQ29uc3RydWN0aW9uIG9mIGEgZnVuY3Rpb24gZnJvbSBhIGZ1bmN0aW9uCi0gIGZ1bmNfdm9pZF90eXBlIHY2KCZ3cml0ZV9maXZlKTsKLQotICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY2KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKSBtZXRob2QKLSAgdjYuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0sodjYuZW1wdHkoKSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgotICB2NiA9IHRocmVlOwotICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjYoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCi0gIHY2ID0gZml2ZTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyKCkKLSAgdjYuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0sodjYuZW1wdHkoKSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2NiA9ICZ3cml0ZV9maXZlOwotICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjYoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHY2ID0gJndyaXRlX3RocmVlOwotICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjYoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ25tZW50Ci0gIHY2ID0gZml2ZTsKLSAgQk9PU1RfQ0hFQ0soIXY2LmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY2KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gQ29uc3QgdnMuIG5vbi1jb25zdAotICAvLyBJbml0aWFsaXphdGlvbiBmb3IgQm9ybGFuZCBDKysgNS41Ci0gIHdyaXRlX2NvbnN0XzFfbm9uY29uc3RfMiBvbmVfb3JfdHdvID0gd3JpdGVfY29uc3RfMV9ub25jb25zdF8yKCk7IAotICBjb25zdCBmdW5jdGlvbjA8dm9pZD4gdjcob25lX29yX3R3byk7Ci0gIGZ1bmN0aW9uMDx2b2lkPiB2OChvbmVfb3JfdHdvKTsKLQotICBnbG9iYWxfaW50ID0gMDsKLSAgdjcoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAyKTsKLQotICBnbG9iYWxfaW50ID0gMDsKLSAgdjgoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAyKTsKLQotICAvLyBUZXN0IGNvbnN0cnVjdGlvbiBmcm9tIDAgYW5kIGNvbXBhcmlzb24gdG8gMAotICBmdW5jX3ZvaWRfdHlwZSB2OSgwKTsKLSAgQk9PU1RfQ0hFQ0sodjkgPT0gMCk7Ci0jIGlmICFkZWZpbmVkKF9fU1VOUFJPX0NDKSB8fCBfX1NVTlBST19DQyA+IDB4NTQwIHx8IGRlZmluZWQoQk9PU1RfU1RSSUNUX0NPTkZJRykKLSAgQk9PU1RfQ0hFQ0soMCA9PSB2OSk7Ci0jZWxzZQotICBCT09TVF9DSEVDSyh2OS5lbXB0eSgpKTsKLSNlbmRpZgotCi0gIC8vIFRlc3QgcmV0dXJuIHZhbHVlcwotICB0eXBlZGVmIGZ1bmN0aW9uMDxpbnQ+IGZ1bmNfaW50X3R5cGU7Ci0gIC8vIEluaXRpYWxpemF0aW9uIGZvciBCb3JsYW5kIEMrKyA1LjUKLSAgZ2VuZXJhdGVfZml2ZV9vYmogZ2VuX2ZpdmUgPSBnZW5lcmF0ZV9maXZlX29iaigpOwotICBnZW5lcmF0ZV90aHJlZV9vYmogZ2VuX3RocmVlID0gZ2VuZXJhdGVfdGhyZWVfb2JqKCk7Ci0gIGZ1bmNfaW50X3R5cGUgaTAoZ2VuX2ZpdmUpOwotCi0gIEJPT1NUX0NIRUNLKGkwKCkgPT0gNSk7Ci0gIGkwID0gZ2VuX3RocmVlOwotICBCT09TVF9DSEVDSyhpMCgpID09IDMpOwotICBpMCA9ICZnZW5lcmF0ZV9maXZlOwotICBCT09TVF9DSEVDSyhpMCgpID09IDUpOwotICBpMCA9ICZnZW5lcmF0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soaTAoKSA9PSAzKTsKLSAgQk9PU1RfQ0hFQ0soaTA/IHRydWUgOiBmYWxzZSk7Ci0gIGkwLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKCFpMD8gdHJ1ZSA6IGZhbHNlKTsKLQotICAvLyBUZXN0IHJldHVybiB2YWx1ZXMgd2l0aCBjb21wYXRpYmxlIHR5cGVzCi0gIHR5cGVkZWYgZnVuY3Rpb24wPGxvbmc+IGZ1bmNfbG9uZ190eXBlOwotICBmdW5jX2xvbmdfdHlwZSBpMShnZW5fZml2ZSk7Ci0KLSAgQk9PU1RfQ0hFQ0soaTEoKSA9PSA1KTsKLSAgaTEgPSBnZW5fdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKGkxKCkgPT0gMyk7Ci0gIGkxID0gJmdlbmVyYXRlX2ZpdmU7Ci0gIEJPT1NUX0NIRUNLKGkxKCkgPT0gNSk7Ci0gIGkxID0gJmdlbmVyYXRlX3RocmVlOwotICBCT09TVF9DSEVDSyhpMSgpID09IDMpOwotICBCT09TVF9DSEVDSyhpMT8gdHJ1ZSA6IGZhbHNlKTsKLSAgaTEuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0soIWkxPyB0cnVlIDogZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9vbmVfYXJnKCkKLXsKLSAgbmVnYXRlPGludD4gbmVnID0gbmVnYXRlPGludD4oKTsgLy8gSW5pdGlhbGl6YXRpb24gZm9yIEJvcmxhbmQgQysrIDUuNQotCi0gIGZ1bmN0aW9uMTxpbnQsIGludD4gZjEobmVnKTsKLSAgQk9PU1RfQ0hFQ0soZjEoNSkgPT0gLTUpOwotCi0gIGZ1bmN0aW9uMTxzdHJpbmcsIHN0cmluZz4gaWQoJmlkZW50aXR5X3N0cik7Ci0gIEJPT1NUX0NIRUNLKGlkKCJzdHIiKSA9PSAic3RyIik7Ci0KLSAgZnVuY3Rpb24xPHN0ZDo6c3RyaW5nLCBjb25zdCBjaGFyKj4gaWQyKCZpZGVudGl0eV9zdHIpOwotICBCT09TVF9DSEVDSyhpZDIoImZvbyIpID09ICJmb28iKTsKLQotICBhZGRfdG9fb2JqIGFkZF90byg1KTsKLSAgZnVuY3Rpb24xPGludCwgaW50PiBmMihhZGRfdG8pOwotICBCT09TVF9DSEVDSyhmMigzKSA9PSA4KTsKLQotICBjb25zdCBmdW5jdGlvbjE8aW50LCBpbnQ+IGNmMihhZGRfdG8pOwotICBCT09TVF9DSEVDSyhjZjIoMykgPT0gOCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3R3b19hcmdzKCkKLXsKLSAgZnVuY3Rpb24yPHN0cmluZywgY29uc3Qgc3RyaW5nJiwgY29uc3Qgc3RyaW5nJj4gY2F0KCZzdHJpbmdfY2F0KTsKLSAgQk9PU1RfQ0hFQ0soY2F0KCJzdHIiLCAiaW5nIikgPT0gInN0cmluZyIpOwotCi0gIGZ1bmN0aW9uMjxpbnQsIHNob3J0LCBzaG9ydD4gc3VtKCZzdW1faW50cyk7Ci0gIEJPT1NUX0NIRUNLKHN1bSgyLCAzKSA9PSA1KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfZW1wdGluZXNzKCkKLXsKLSAgZnVuY3Rpb24wPGZsb2F0PiBmMTsKLSAgQk9PU1RfQ0hFQ0soZjEuZW1wdHkoKSk7Ci0KLSAgZnVuY3Rpb24wPGZsb2F0PiBmMjsKLSAgZjIgPSBmMTsKLSAgQk9PU1RfQ0hFQ0soZjIuZW1wdHkoKSk7Ci0KLSAgZnVuY3Rpb24wPGRvdWJsZT4gZjM7Ci0gIGYzID0gZjI7Ci0gIEJPT1NUX0NIRUNLKGYzLmVtcHR5KCkpOwotfQotCi1zdHJ1Y3QgWCB7Ci0gIFgoaW50IHYpIDogdmFsdWUodikge30KLQotICBpbnQgdHdpY2UoKSBjb25zdCB7IHJldHVybiAyKnZhbHVlOyB9Ci0gIGludCBwbHVzKGludCB2KSB7IHJldHVybiB2YWx1ZSArIHY7IH0KLQotICBpbnQgdmFsdWU7Ci19OwotCi1zdGF0aWMgdm9pZAotdGVzdF9tZW1iZXJfZnVuY3Rpb25zKCkKLXsKLQotICBuZG5ib29zdDo6ZnVuY3Rpb24xPGludCwgWCo+IGYxKCZYOjp0d2ljZSk7Ci0KLSAgWCBvbmUoMSk7Ci0gIFggZml2ZSg1KTsKLQotICBCT09TVF9DSEVDSyhmMSgmb25lKSA9PSAyKTsKLSAgQk9PU1RfQ0hFQ0soZjEoJmZpdmUpID09IDEwKTsKLQotICBuZG5ib29zdDo6ZnVuY3Rpb24xPGludCwgWCo+IGYxXzI7Ci0gIGYxXzIgPSAmWDo6dHdpY2U7Ci0KLSAgQk9PU1RfQ0hFQ0soZjFfMigmb25lKSA9PSAyKTsKLSAgQk9PU1RfQ0hFQ0soZjFfMigmZml2ZSkgPT0gMTApOwotCi0gIG5kbmJvb3N0OjpmdW5jdGlvbjI8aW50LCBYJiwgaW50PiBmMigmWDo6cGx1cyk7Ci0gIEJPT1NUX0NIRUNLKGYyKG9uZSwgMykgPT0gNCk7Ci0gIEJPT1NUX0NIRUNLKGYyKGZpdmUsIDQpID09IDkpOwotfQotCi1zdHJ1Y3QgYWRkX3dpdGhfdGhyb3dfb25fY29weSB7Ci0gIGludCBvcGVyYXRvcigpKGludCB4LCBpbnQgeSkgY29uc3QgeyByZXR1cm4geCt5OyB9Ci0KLSAgYWRkX3dpdGhfdGhyb3dfb25fY29weSgpIHt9Ci0KLSAgYWRkX3dpdGhfdGhyb3dfb25fY29weShjb25zdCBhZGRfd2l0aF90aHJvd19vbl9jb3B5JikKLSAgewotICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiQnV0IHRoaXMgQ0FOJ1QgdGhyb3ciKTsKLSAgfQotCi0gIGFkZF93aXRoX3Rocm93X29uX2NvcHkmIG9wZXJhdG9yPShjb25zdCBhZGRfd2l0aF90aHJvd19vbl9jb3B5JikKLSAgewotICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiQnV0IHRoaXMgQ0FOJ1QgdGhyb3ciKTsKLSAgfQotfTsKLQotc3RhdGljIHZvaWQKLXRlc3RfcmVmKCkKLXsKLSAgYWRkX3dpdGhfdGhyb3dfb25fY29weSBhdGM7Ci0gIHRyeSB7Ci0gICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMjxpbnQsIGludCwgaW50PiBmKHJlZihhdGMpKTsKLSAgICBCT09TVF9DSEVDSyhmKDEsIDMpID09IDQpOwotICB9Ci0gIGNhdGNoKHN0ZDo6cnVudGltZV9lcnJvciBlKSB7Ci0gICAgQk9PU1RfRVJST1IoIk5vbnRocm93aW5nIGNvbnN0cnVjdG9yIHRocmV3IGFuIGV4Y2VwdGlvbiIpOwotICB9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25fY291bnQgPSAwOwotc3RhdGljIHVuc2lnbmVkIGRlc3RydWN0aW9uX2NvdW50ID0gMDsKLQotc3RydWN0IE15U21hbGxGdW5jdG9yIHsKLSAgTXlTbWFsbEZ1bmN0b3IoKSB7ICsrY29uc3RydWN0aW9uX2NvdW50OyB9Ci0gIE15U21hbGxGdW5jdG9yKGNvbnN0IE15U21hbGxGdW5jdG9yICYpIHsgKytjb25zdHJ1Y3Rpb25fY291bnQ7IH0KLSAgfk15U21hbGxGdW5jdG9yKCkgeyArK2Rlc3RydWN0aW9uX2NvdW50OyB9Ci0gIGludCBvcGVyYXRvcigpKCkgeyByZXR1cm4gMDsgfQotIH07Ci0KLXN0cnVjdCBNeUxhcmdlRnVuY3RvciB7Ci0gIE15TGFyZ2VGdW5jdG9yKCkgeyArK2NvbnN0cnVjdGlvbl9jb3VudDsgfQotICBNeUxhcmdlRnVuY3Rvcihjb25zdCBNeUxhcmdlRnVuY3RvciAmKSB7ICsrY29uc3RydWN0aW9uX2NvdW50OyB9Ci0gIH5NeUxhcmdlRnVuY3RvcigpIHsgKytkZXN0cnVjdGlvbl9jb3VudDsgfQotICBpbnQgb3BlcmF0b3IoKSgpIHsgcmV0dXJuIDA7IH0KLQotICBmbG9hdCBkYXRhWzEyOF07Ci0gfTsKLQotdm9pZCB0ZXN0X2NvbnN0cnVjdF9kZXN0cm95X2NvdW50KCkKLXsKLSAgewotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjA8aW50PiBmOwotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjA8aW50PiBnOwotICAgIGYgPSBNeVNtYWxsRnVuY3RvcigpOwotICAgIGcgPSBNeVNtYWxsRnVuY3RvcigpOwotICAgIGYuc3dhcChnKTsKLSAgfQotCi0gIC8vIE15U21hbGxGdW5jdG9yIG9iamVjdHMgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIGFzIG1hbnkgdGltZXMgYXMKLSAgLy8gdGhleSBhcmUgZGVzdHJveWVkLgotICBCT09TVF9DSEVDSyhjb25zdHJ1Y3Rpb25fY291bnQgPT0gZGVzdHJ1Y3Rpb25fY291bnQpOwotIAotICBjb25zdHJ1Y3Rpb25fY291bnQgPSAwOwotICBkZXN0cnVjdGlvbl9jb3VudCA9IDA7Ci0gIHsKLSAgICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZjsKLSAgICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZzsKLSAgICBmID0gTXlMYXJnZUZ1bmN0b3IoKTsKLSAgICBnID0gTXlMYXJnZUZ1bmN0b3IoKTsKLSAgICBmLnN3YXAoZyk7Ci0gICB9Ci0KLSAgIC8vIE15TGFyZ2VGdW5jdG9yIG9iamVjdHMgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIGFzIG1hbnkgdGltZXMgYXMKLSAgIC8vIHRoZXkgYXJlIGRlc3Ryb3llZC4KLSAgIEJPT1NUX0NIRUNLKGNvbnN0cnVjdGlvbl9jb3VudCA9PSBkZXN0cnVjdGlvbl9jb3VudCk7Ci19Ci0KLWludCB0ZXN0X21haW4oaW50LCBjaGFyKiBbXSkKLXsKLSAgdGVzdF96ZXJvX2FyZ3MoKTsKLSAgdGVzdF9vbmVfYXJnKCk7Ci0gIHRlc3RfdHdvX2FyZ3MoKTsKLSAgdGVzdF9lbXB0aW5lc3MoKTsKLSAgdGVzdF9tZW1iZXJfZnVuY3Rpb25zKCk7Ci0gIHRlc3RfcmVmKCk7Ci0gIHRlc3RfY29uc3RydWN0X2Rlc3Ryb3lfY291bnQoKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fcmVmX2N4eDk4LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9yZWZfY3h4OTguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDc5YzlkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9yZWZfY3h4OTguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLy8gRnVuY3Rpb24gbGlicmFyeQotCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgotCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLwotCi0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLQotc3RydWN0IHN0YXRlZnVsX3R5cGUgeyBpbnQgb3BlcmF0b3IoKShpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0gfTsKLQotaW50IG1haW4oKQotewotICAgIHN0YXRlZnVsX3R5cGUgYV9mdW5jdGlvbl9vYmplY3Q7Ci0gIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKGludCk+IGY7Ci0gIGYgPSBuZG5ib29zdDo6cmVmKGFfZnVuY3Rpb25fb2JqZWN0KTsKLQotICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChpbnQpPiBmMihmKTsKLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3JlZl9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fcmVmX3BvcnRhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjODRhMi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fcmVmX3BvcnRhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8vIEZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRG91Z2xhcyBHcmVnb3IKLQotLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKLS8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy8KLQotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0KLXN0cnVjdCBzdGF0ZWZ1bF90eXBlIHsgaW50IG9wZXJhdG9yKCkoaW50KSBjb25zdCB7IHJldHVybiAwOyB9IH07Ci0KLWludCBtYWluKCkKLXsKLSAgICBzdGF0ZWZ1bF90eXBlIGFfZnVuY3Rpb25fb2JqZWN0OwotICBuZG5ib29zdDo6ZnVuY3Rpb24xPGludCwgaW50PiBmOwotICBmID0gbmRuYm9vc3Q6OnJlZihhX2Z1bmN0aW9uX29iamVjdCk7Ci0KLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uMTxpbnQsIGludD4gZjIoZik7Ci0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjN2NiOC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OTggKzAsMCBAQAotLy8gQm9vc3QuRnVuY3Rpb24gbGlicmFyeQotCi0vLyAgQ29weXJpZ2h0IERvdWdsYXMgR3JlZ29yIDIwMDEtMjAwMy4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLS8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcKLQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvbWluaW1hbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLXVzaW5nIG5kbmJvb3N0OjpmdW5jdGlvbjsKLXVzaW5nIHN0ZDo6c3RyaW5nOwotCi1pbnQgZ2xvYmFsX2ludDsKLQotc3RydWN0IHdyaXRlX2ZpdmVfb2JqIHsgdm9pZCBvcGVyYXRvcigpKCkgY29uc3QgeyBnbG9iYWxfaW50ID0gNTsgfSB9Owotc3RydWN0IHdyaXRlX3RocmVlX29iaiB7IGludCBvcGVyYXRvcigpKCkgY29uc3QgeyBnbG9iYWxfaW50ID0gMzsgcmV0dXJuIDc7IH19Owotc3RhdGljIHZvaWQgd3JpdGVfZml2ZSgpIHsgZ2xvYmFsX2ludCA9IDU7IH0KLXN0YXRpYyB2b2lkIHdyaXRlX3RocmVlKCkgeyBnbG9iYWxfaW50ID0gMzsgfQotc3RydWN0IGdlbmVyYXRlX2ZpdmVfb2JqIHsgaW50IG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiA1OyB9IH07Ci1zdHJ1Y3QgZ2VuZXJhdGVfdGhyZWVfb2JqIHsgaW50IG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiAzOyB9IH07Ci1zdGF0aWMgaW50IGdlbmVyYXRlX2ZpdmUoKSB7IHJldHVybiA1OyB9Ci1zdGF0aWMgaW50IGdlbmVyYXRlX3RocmVlKCkgeyByZXR1cm4gMzsgfQotc3RhdGljIHN0cmluZyBpZGVudGl0eV9zdHIoY29uc3Qgc3RyaW5nJiBzKSB7IHJldHVybiBzOyB9Ci1zdGF0aWMgc3RyaW5nIHN0cmluZ19jYXQoY29uc3Qgc3RyaW5nJiBzMSwgY29uc3Qgc3RyaW5nJiBzMikgeyByZXR1cm4gczErczI7IH0KLXN0YXRpYyBpbnQgc3VtX2ludHMoaW50IHgsIGludCB5KSB7IHJldHVybiB4K3k7IH0KLQotc3RydWN0IHdyaXRlX2NvbnN0XzFfbm9uY29uc3RfMgotewotICB2b2lkIG9wZXJhdG9yKCkoKSB7IGdsb2JhbF9pbnQgPSAyOyB9Ci0gIHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgZ2xvYmFsX2ludCA9IDE7IH0KLX07Ci0KLXN0cnVjdCBhZGRfdG9fb2JqCi17Ci0gIGFkZF90b19vYmooaW50IHYpIDogdmFsdWUodikge30KLQotICBpbnQgb3BlcmF0b3IoKShpbnQgeCkgY29uc3QgeyByZXR1cm4gdmFsdWUgKyB4OyB9Ci0KLSAgaW50IHZhbHVlOwotfTsKLQotc3RhdGljIHZvaWQKLXRlc3RfemVyb19hcmdzKCkKLXsKLSAgdHlwZWRlZiBmdW5jdGlvbjx2b2lkICgpPiBmdW5jX3ZvaWRfdHlwZTsKLQotICB3cml0ZV9maXZlX29iaiBmaXZlOwotICB3cml0ZV90aHJlZV9vYmogdGhyZWU7Ci0KLSAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rpb24KLSAgZnVuY192b2lkX3R5cGUgdjE7Ci0gIEJPT1NUX0NIRUNLKHYxLmVtcHR5KCkpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KLSAgdjEgPSBmaXZlOwotICBCT09TVF9DSEVDSyh2MSAhPSAwKTsKLQotICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYxKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKSBtZXRob2QKLSAgdjEuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0sodjEgPT0gMCk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgotICB2MSA9IHRocmVlOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbiBhbmQgc2VsZi1hc3NpZ25tZW50Ci0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSA9IHYxOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjEgPSBmaXZlOwotCi0gIC8vIEludm9jYXRpb24gYW5kIHNlbGYtYXNzaWdubWVudAotICBnbG9iYWxfaW50ID0gMDsKLSAgdjEgPSAodjEpOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyCi0gIHYxID0gMDsKLSAgQk9PU1RfQ0hFQ0soMCA9PSB2MSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2MSA9IEJPT1NUX0ZVTkNUSU9OX1RBUkdFVF9GSVgoJikgd3JpdGVfZml2ZTsKLSAgQk9PU1RfQ0hFQ0soMCAhPSB2MSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjEoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYxID0gQk9PU1RfRlVOQ1RJT05fVEFSR0VUX0ZJWCgmKSB3cml0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYxKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudAotICB2MSA9IGZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2MS5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjEgPSAmd3JpdGVfdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2MS5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIENvbnN0cnVjdGlvbiBmcm9tIGFub3RoZXIgZnVuY3Rpb24gKHRoYXQgaXMgZW1wdHkpCi0gIHYxLmNsZWFyKCk7Ci0gIGZ1bmNfdm9pZF90eXBlIHYyKHYxKTsKLSAgQk9PU1RfQ0hFQ0soIXYyPyB0cnVlIDogZmFsc2UpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KLSAgdjIgPSB0aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYyKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbgotICB2MiA9IChmaXZlKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIHYyLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKHYyLmVtcHR5KCkpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjIgPSAoQk9PU1RfRlVOQ1RJT05fVEFSR0VUX0ZJWCgmKSB3cml0ZV9maXZlKTsKLSAgQk9PU1RfQ0hFQ0sodjI/IHRydWUgOiBmYWxzZSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHYyID0gQk9PU1RfRlVOQ1RJT05fVEFSR0VUX0ZJWCgmKSB3cml0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYyKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gU3dhcHBpbmcKLSAgdjEgPSBmaXZlOwotICBzd2FwKHYxLCB2Mik7Ci0gIHYyKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0gIHYxKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0gIHN3YXAodjEsIHYyKTsKLSAgdjEuY2xlYXIoKTsKLQotICAvLyBBc3NpZ25tZW50Ci0gIHYyID0gZml2ZTsKLSAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYyKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2MiA9ICZ3cml0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYyKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIGZ1bmN0aW9uIGZyb20gYW4gZW1wdHkgZnVuY3Rpb24KLSAgdjIgPSB2MTsKLSAgQk9PU1RfQ0hFQ0sodjIuZW1wdHkoKSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIGZ1bmN0aW9uIGZyb20gYSBmdW5jdGlvbiB3aXRoIGEgZnVuY3RvcgotICB2MSA9IHRocmVlOwotICB2MiA9IHYxOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotICBnbG9iYWxfaW50ID0gMDsKLSAgdjIoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKLQotICAvLyBBc3NpZ24gdG8gYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3Rpb24gd2l0aCBhIGZ1bmN0aW9uCi0gIHYyID0gQk9PU1RfRlVOQ1RJT05fVEFSR0VUX0ZJWCgmKSB3cml0ZV9maXZlOwotICB2MSA9IHYyOwotICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYxKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0gIGdsb2JhbF9pbnQgPSAwOwotICB2MigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIENvbnN0cnVjdCBhIGZ1bmN0aW9uIGdpdmVuIGFub3RoZXIgZnVuY3Rpb24gY29udGFpbmluZyBhIGZ1bmN0aW9uCi0gIGZ1bmNfdm9pZF90eXBlIHYzKHYxKTsKLQotICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYzKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKSBtZXRob2QKLSAgdjMuY2xlYXIoKTsKLSAgQk9PU1RfQ0hFQ0soIXYzPyB0cnVlIDogZmFsc2UpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KLSAgdjMgPSB0aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXYzLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYzKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbgotICB2MyA9IGZpdmU7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjMoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBjbGVhcigpCi0gIHYzLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKHYzLmVtcHR5KCkpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjMgPSAmd3JpdGVfZml2ZTsKLSAgQk9PU1RfQ0hFQ0soIXYzLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYzKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2MyA9ICZ3cml0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXYzLmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHYzKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudAotICB2MyA9IGZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2MygpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIENvbnN0cnVjdGlvbiBvZiBhIGZ1bmN0aW9uIGZyb20gYSBmdW5jdGlvbiBjb250YWluaW5nIGEgZnVuY3RvcgotICBmdW5jX3ZvaWRfdHlwZSB2NCh2Myk7Ci0KLSAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NCgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIGNsZWFyKCkgbWV0aG9kCi0gIHY0LmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKHY0LmVtcHR5KCkpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KLSAgdjQgPSB0aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXY0LmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY0KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbgotICB2NCA9IGZpdmU7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjQoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBjbGVhcigpCi0gIHY0LmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKHY0LmVtcHR5KCkpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjQgPSAmd3JpdGVfZml2ZTsKLSAgQk9PU1RfQ0hFQ0soIXY0LmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY0KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgotICB2NCA9ICZ3cml0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soIXY0LmVtcHR5KCkpOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY0KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0KLSAgLy8gQXNzaWdubWVudAotICB2NCA9IGZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NCgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIENvbnN0cnVjdGlvbiBvZiBhIGZ1bmN0aW9uIGZyb20gYSBmdW5jdG9yCi0gIGZ1bmNfdm9pZF90eXBlIHY1KGZpdmUpOwotCi0gIC8vIEludm9jYXRpb24gb2YgYSBmdW5jdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjUoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBjbGVhcigpIG1ldGhvZAotICB2NS5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2NS5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCi0gIHY1ID0gdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2NS5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjUgPSBmaXZlOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY1KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKQotICB2NS5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2NS5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHY1ID0gJndyaXRlX2ZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2NS5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjUgPSAmd3JpdGVfdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2NS5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NSgpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQKLSAgdjUgPSBmaXZlOwotICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjUoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3Rpb24KLSAgZnVuY192b2lkX3R5cGUgdjYoJndyaXRlX2ZpdmUpOwotCi0gIC8vIEludm9jYXRpb24gb2YgYSBmdW5jdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjYoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBjbGVhcigpIG1ldGhvZAotICB2Ni5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2Ni5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCi0gIHY2ID0gdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2Ni5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KLSAgdjYgPSBmaXZlOwotCi0gIC8vIEludm9jYXRpb24KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY2KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7Ci0KLSAgLy8gY2xlYXIoKQotICB2Ni5jbGVhcigpOwotICBCT09TVF9DSEVDSyh2Ni5lbXB0eSgpKTsKLQotICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCi0gIHY2ID0gJndyaXRlX2ZpdmU7Ci0gIEJPT1NUX0NIRUNLKCF2Ni5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOwotCi0gIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KLSAgdjYgPSAmd3JpdGVfdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKCF2Ni5lbXB0eSgpKTsKLQotICAvLyBJbnZvY2F0aW9uCi0gIGdsb2JhbF9pbnQgPSAwOwotICB2NigpOwotICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOwotCi0gIC8vIEFzc2lnbm1lbnQKLSAgdjYgPSBmaXZlOwotICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7Ci0KLSAgLy8gSW52b2NhdGlvbgotICBnbG9iYWxfaW50ID0gMDsKLSAgdjYoKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLQotICAvLyBDb25zdCB2cy4gbm9uLWNvbnN0Ci0gIHdyaXRlX2NvbnN0XzFfbm9uY29uc3RfMiBvbmVfb3JfdHdvOwotICBjb25zdCBmdW5jdGlvbjx2b2lkICgpPiB2NyhvbmVfb3JfdHdvKTsKLSAgZnVuY3Rpb248dm9pZCAoKT4gdjgob25lX29yX3R3byk7Ci0KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY3KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMik7Ci0KLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIHY4KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMik7Ci0KLSAgLy8gVGVzdCBjb25zdHJ1Y3Rpb24gZnJvbSAwIGFuZCBjb21wYXJpc29uIHRvIDAKLSAgZnVuY192b2lkX3R5cGUgdjkoMCk7Ci0gIEJPT1NUX0NIRUNLKHY5ID09IDApOwotICBCT09TVF9DSEVDSygwID09IHY5KTsKLQotICAvLyBUZXN0IHJldHVybiB2YWx1ZXMKLSAgdHlwZWRlZiBmdW5jdGlvbjxpbnQgKCk+IGZ1bmNfaW50X3R5cGU7Ci0gIGdlbmVyYXRlX2ZpdmVfb2JqIGdlbl9maXZlOwotICBnZW5lcmF0ZV90aHJlZV9vYmogZ2VuX3RocmVlOwotCi0gIGZ1bmNfaW50X3R5cGUgaTAoZ2VuX2ZpdmUpOwotCi0gIEJPT1NUX0NIRUNLKGkwKCkgPT0gNSk7Ci0gIGkwID0gZ2VuX3RocmVlOwotICBCT09TVF9DSEVDSyhpMCgpID09IDMpOwotICBpMCA9ICZnZW5lcmF0ZV9maXZlOwotICBCT09TVF9DSEVDSyhpMCgpID09IDUpOwotICBpMCA9ICZnZW5lcmF0ZV90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soaTAoKSA9PSAzKTsKLSAgQk9PU1RfQ0hFQ0soaTA/IHRydWUgOiBmYWxzZSk7Ci0gIGkwLmNsZWFyKCk7Ci0gIEJPT1NUX0NIRUNLKCFpMD8gdHJ1ZSA6IGZhbHNlKTsKLQotICAvLyBUZXN0IHJldHVybiB2YWx1ZXMgd2l0aCBjb21wYXRpYmxlIHR5cGVzCi0gIHR5cGVkZWYgZnVuY3Rpb248bG9uZyAoKT4gZnVuY19sb25nX3R5cGU7Ci0gIGZ1bmNfbG9uZ190eXBlIGkxKGdlbl9maXZlKTsKLQotICBCT09TVF9DSEVDSyhpMSgpID09IDUpOwotICBpMSA9IGdlbl90aHJlZTsKLSAgQk9PU1RfQ0hFQ0soaTEoKSA9PSAzKTsKLSAgaTEgPSAmZ2VuZXJhdGVfZml2ZTsKLSAgQk9PU1RfQ0hFQ0soaTEoKSA9PSA1KTsKLSAgaTEgPSAmZ2VuZXJhdGVfdGhyZWU7Ci0gIEJPT1NUX0NIRUNLKGkxKCkgPT0gMyk7Ci0gIEJPT1NUX0NIRUNLKGkxPyB0cnVlIDogZmFsc2UpOwotICBpMS5jbGVhcigpOwotICBCT09TVF9DSEVDSyghaTE/IHRydWUgOiBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X29uZV9hcmcoKQotewotICBzdGQ6Om5lZ2F0ZTxpbnQ+IG5lZzsKLQotICBmdW5jdGlvbjxpbnQgKGludCk+IGYxKG5lZyk7Ci0gIEJPT1NUX0NIRUNLKGYxKDUpID09IC01KTsKLQotICBmdW5jdGlvbjxzdHJpbmcgKHN0cmluZyk+IGlkKCZpZGVudGl0eV9zdHIpOwotICBCT09TVF9DSEVDSyhpZCgic3RyIikgPT0gInN0ciIpOwotCi0gIGZ1bmN0aW9uPHN0cmluZyAoY29uc3QgY2hhciopPiBpZDIoJmlkZW50aXR5X3N0cik7Ci0gIEJPT1NUX0NIRUNLKGlkMigiZm9vIikgPT0gImZvbyIpOwotCi0gIGFkZF90b19vYmogYWRkX3RvKDUpOwotICBmdW5jdGlvbjxpbnQgKGludCk+IGYyKGFkZF90byk7Ci0gIEJPT1NUX0NIRUNLKGYyKDMpID09IDgpOwotCi0gIGNvbnN0IGZ1bmN0aW9uPGludCAoaW50KT4gY2YyKGFkZF90byk7Ci0gIEJPT1NUX0NIRUNLKGNmMigzKSA9PSA4KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfdHdvX2FyZ3MoKQotewotICBmdW5jdGlvbjxzdHJpbmcgKGNvbnN0IHN0cmluZyYsIGNvbnN0IHN0cmluZyYpPiBjYXQoJnN0cmluZ19jYXQpOwotICBCT09TVF9DSEVDSyhjYXQoInN0ciIsICJpbmciKSA9PSAic3RyaW5nIik7Ci0KLSAgZnVuY3Rpb248aW50IChzaG9ydCwgc2hvcnQpPiBzdW0oJnN1bV9pbnRzKTsKLSAgQk9PU1RfQ0hFQ0soc3VtKDIsIDMpID09IDUpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9lbXB0aW5lc3MoKQotewotICBmdW5jdGlvbjxmbG9hdCAoKT4gZjE7Ci0gIEJPT1NUX0NIRUNLKGYxLmVtcHR5KCkpOwotCi0gIGZ1bmN0aW9uPGZsb2F0ICgpPiBmMjsKLSAgZjIgPSBmMTsKLSAgQk9PU1RfQ0hFQ0soZjIuZW1wdHkoKSk7Ci0KLSAgZnVuY3Rpb248ZG91YmxlICgpPiBmMzsKLSAgZjMgPSBmMjsKLSAgQk9PU1RfQ0hFQ0soZjMuZW1wdHkoKSk7Ci19Ci0KLXN0cnVjdCBYIHsKLSAgWChpbnQgdikgOiB2YWx1ZSh2KSB7fQotCi0gIGludCB0d2ljZSgpIGNvbnN0IHsgcmV0dXJuIDIqdmFsdWU7IH0KLSAgaW50IHBsdXMoaW50IHYpIHsgcmV0dXJuIHZhbHVlICsgdjsgfQotCi0gIGludCB2YWx1ZTsKLX07Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X21lbWJlcl9mdW5jdGlvbnMoKQotewotICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChYKik+IGYxKCZYOjp0d2ljZSk7Ci0KLSAgWCBvbmUoMSk7Ci0gIFggZml2ZSg1KTsKLQotICBCT09TVF9DSEVDSyhmMSgmb25lKSA9PSAyKTsKLSAgQk9PU1RfQ0hFQ0soZjEoJmZpdmUpID09IDEwKTsKLQotICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChYKik+IGYxXzI7Ci0gIGYxXzIgPSAmWDo6dHdpY2U7Ci0KLSAgQk9PU1RfQ0hFQ0soZjFfMigmb25lKSA9PSAyKTsKLSAgQk9PU1RfQ0hFQ0soZjFfMigmZml2ZSkgPT0gMTApOwotCi0gIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKFgmLCBpbnQpPiBmMigmWDo6cGx1cyk7Ci0gIEJPT1NUX0NIRUNLKGYyKG9uZSwgMykgPT0gNCk7Ci0gIEJPT1NUX0NIRUNLKGYyKGZpdmUsIDQpID09IDkpOwotfQotCi1zdHJ1Y3QgYWRkX3dpdGhfdGhyb3dfb25fY29weSB7Ci0gIGludCBvcGVyYXRvcigpKGludCB4LCBpbnQgeSkgY29uc3QgeyByZXR1cm4geCt5OyB9Ci0KLSAgYWRkX3dpdGhfdGhyb3dfb25fY29weSgpIHt9Ci0KLSAgYWRkX3dpdGhfdGhyb3dfb25fY29weShjb25zdCBhZGRfd2l0aF90aHJvd19vbl9jb3B5JikKLSAgewotICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiQnV0IHRoaXMgQ0FOJ1QgdGhyb3ciKTsKLSAgfQotCi0gIGFkZF93aXRoX3Rocm93X29uX2NvcHkmIG9wZXJhdG9yPShjb25zdCBhZGRfd2l0aF90aHJvd19vbl9jb3B5JikKLSAgewotICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiQnV0IHRoaXMgQ0FOJ1QgdGhyb3ciKTsKLSAgfQotfTsKLQotc3RhdGljIHZvaWQKLXRlc3RfcmVmKCkKLXsKLSAgYWRkX3dpdGhfdGhyb3dfb25fY29weSBhdGM7Ci0gIHRyeSB7Ci0gICAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoaW50LCBpbnQpPiBmKG5kbmJvb3N0OjpyZWYoYXRjKSk7Ci0gICAgQk9PU1RfQ0hFQ0soZigxLCAzKSA9PSA0KTsKLSAgfQotICBjYXRjaChzdGQ6OnJ1bnRpbWVfZXJyb3IgZSkgewotICAgIEJPT1NUX0VSUk9SKCJOb250aHJvd2luZyBjb25zdHJ1Y3RvciB0aHJldyBhbiBleGNlcHRpb24iKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBkdW1teSgpIHt9Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZW1wdHlfcmVmKCkKLXsKLSAgbmRuYm9vc3Q6OmZ1bmN0aW9uPHZvaWQoKT4gZjE7Ci0gIG5kbmJvb3N0OjpmdW5jdGlvbjx2b2lkKCk+IGYyKG5kbmJvb3N0OjpyZWYoZjEpKTsKLQotICB0cnkgewotICAgIGYyKCk7Ci0gICAgQk9PU1RfRVJST1IoIkV4Y2VwdGlvbiBkaWRuJ3QgdGhyb3cgZm9yIHJlZmVyZW5jZSB0byBlbXB0eSBmdW5jdGlvbi4iKTsKLSAgfQotICBjYXRjaChzdGQ6OnJ1bnRpbWVfZXJyb3IgZSkge30KLQotICBmMSA9IGR1bW15OwotCi0gIHRyeSB7Ci0gICAgZjIoKTsKLSAgfQotICBjYXRjaChzdGQ6OnJ1bnRpbWVfZXJyb3IgZSkgewotICAgIEJPT1NUX0VSUk9SKCJFcnJvciBjYWxsaW5nIHJlZmVyZW5jZWQgZnVuY3Rpb24uIik7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZCB0ZXN0X2V4Y2VwdGlvbigpCi17Ci0gIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKGludCwgaW50KT4gZjsKLSAgdHJ5IHsKLSAgICBmKDUsIDQpOwotICAgIEJPT1NUX0NIRUNLKGZhbHNlKTsKLSAgfQotICBjYXRjaChuZG5ib29zdDo6YmFkX2Z1bmN0aW9uX2NhbGwpIHsKLSAgICAvLyBva2F5Ci0gIH0KLX0KLQotdHlwZWRlZiBuZG5ib29zdDo6ZnVuY3Rpb248IHZvaWQgKiAodm9pZCAqIHJlYWRlcikgPiByZWFkZXJfdHlwZTsKLXR5cGVkZWYgc3RkOjpwYWlyPGludCwgcmVhZGVyX3R5cGU+IG1hcHBlZF90eXBlOwotCi1zdGF0aWMgdm9pZCB0ZXN0X2ltcGxpY2l0KCkKLXsKLSAgbWFwcGVkX3R5cGUgbTsKLSAgbSA9IG1hcHBlZF90eXBlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfY2FsbF9vYmoobmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoaW50LCBpbnQpPiBmKQotewotICBCT09TVF9DSEVDSyghZi5lbXB0eSgpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9jYWxsX2NyZWYoY29uc3QgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoaW50LCBpbnQpPiYgZikKLXsKLSAgQk9PU1RfQ0hFQ0soIWYuZW1wdHkoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfY2FsbCgpCi17Ci0gIHRlc3RfY2FsbF9vYmooc3RkOjpwbHVzPGludD4oKSk7Ci0gIHRlc3RfY2FsbF9jcmVmKHN0ZDo6cGx1czxpbnQ+KCkpOwotfQotCi1zdHJ1Y3QgYmlnX2FnZ3JlZ2F0aW5nX3N0cnVjdHVyZSB7Ci0gIGludCBkaXNhYmxlX3NtYWxsX29iamVjdHNfb3B0aW1pemF0aW9uc1szMl07Ci0gICAgCi0gIGJpZ19hZ2dyZWdhdGluZ19zdHJ1Y3R1cmUoKQotICB7Ci0gICAgKysgZ2xvYmFsX2ludDsKLSAgfQotICAgIAotICBiaWdfYWdncmVnYXRpbmdfc3RydWN0dXJlKGNvbnN0IGJpZ19hZ2dyZWdhdGluZ19zdHJ1Y3R1cmUmKQotICB7Ci0gICAgKysgZ2xvYmFsX2ludDsKLSAgfQotCi0gIH5iaWdfYWdncmVnYXRpbmdfc3RydWN0dXJlKCkKLSAgewotICAgIC0tIGdsb2JhbF9pbnQ7Ci0gIH0KLSAgICAKLSAgdm9pZCBvcGVyYXRvcigpKCkgCi0gIHsKLSAgICArKyBnbG9iYWxfaW50OwotICB9Ci0KLSAgdm9pZCBvcGVyYXRvcigpKGludCkgCi0gIHsKLSAgICArKyBnbG9iYWxfaW50OwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb25UPgotc3RhdGljIHZvaWQgdGVzdF9tb3ZlX3NlbWFudGljcygpIAotewotICB0eXBlZGVmIEZ1bmN0aW9uVCBmMV90eXBlOwotCi0gIGJpZ19hZ2dyZWdhdGluZ19zdHJ1Y3R1cmUgb2JqOwotICAKLSAgZjFfdHlwZSBmMSA9IG9iajsKLSAgZ2xvYmFsX2ludCA9IDA7Ci0gIGYxKCk7Ci0gIAotICBCT09TVF9DSEVDSyghZjEuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMSk7Ci0gIAotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwotICAvLyBUZXN0aW5nIHJ2YWx1ZSBjb25zdHJ1Y3RvcnMKLSAgZjFfdHlwZSBmMihzdGF0aWNfY2FzdDxmMV90eXBlJiY+KGYxKSk7Ci0gIEJPT1NUX0NIRUNLKGYxLmVtcHR5KCkpOwotICBCT09TVF9DSEVDSyghZjIuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMSk7Ci0gIGYyKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMik7Ci0gIAotICBmMV90eXBlIGYzKHN0YXRpY19jYXN0PGYxX3R5cGUmJj4oZjIpKTsKLSAgQk9PU1RfQ0hFQ0soZjEuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKGYyLmVtcHR5KCkpOwotICBCT09TVF9DSEVDSyghZjMuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMik7Ci0gIGYzKCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0gICAgCi0gIC8vIFRlc3RpbmcgbW92ZSBhc3NpZ25tZW50Ci0gIGYxX3R5cGUgZjQ7Ci0gIEJPT1NUX0NIRUNLKGY0LmVtcHR5KCkpOwotICBmNCA9IHN0YXRpY19jYXN0PGYxX3R5cGUmJj4oZjMpOwotICBCT09TVF9DSEVDSyhmMS5lbXB0eSgpKTsKLSAgQk9PU1RfQ0hFQ0soZjIuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKGYzLmVtcHR5KCkpOwotICBCT09TVF9DSEVDSyghZjQuZW1wdHkoKSk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7Ci0gIGY0KCk7Ci0gIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNCk7Ci0gIAotICAvLyBUZXN0aW5nIHNlbGYgbW92ZSBhc3NpZ25tZW50Ci0gIGY0ID0gc3RhdGljX2Nhc3Q8ZjFfdHlwZSYmPihmNCk7Ci0gIEJPT1NUX0NIRUNLKCFmNC5lbXB0eSgpKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA0KTsKLQotICAvLyBUZXN0aW5nLCB0aGF0IG5vIG1lbW9yeSBsZWFrZWQgd2hlbiBhc3NpZ25pbmcgdG8gbm9uZW1wdHkgZnVuY3Rpb24KLSAgZjQgPSBvYmo7Ci0gIEJPT1NUX0NIRUNLKCFmNC5lbXB0eSgpKTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA0KTsKLSAgZjFfdHlwZSBmNSA9IG9iajsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKLSAgZjQgPSBzdGF0aWNfY2FzdDxmMV90eXBlJiY+KGY1KTsKLSAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA0KTsKLSAgCi0jZW5kaWYgIAotfQotCi1pbnQgdGVzdF9tYWluKGludCwgY2hhciogW10pCi17Ci0gIHRlc3RfemVyb19hcmdzKCk7Ci0gIHRlc3Rfb25lX2FyZygpOwotICB0ZXN0X3R3b19hcmdzKCk7Ci0gIHRlc3RfZW1wdGluZXNzKCk7Ci0gIHRlc3RfbWVtYmVyX2Z1bmN0aW9ucygpOwotICB0ZXN0X3JlZigpOwotICB0ZXN0X2VtcHR5X3JlZigpOwotICB0ZXN0X2V4Y2VwdGlvbigpOwotICB0ZXN0X2ltcGxpY2l0KCk7Ci0gIHRlc3RfY2FsbCgpOwotICB0ZXN0X21vdmVfc2VtYW50aWNzPGZ1bmN0aW9uPHZvaWQoKT4gPigpOwotICB0ZXN0X21vdmVfc2VtYW50aWNzPG5kbmJvb3N0OjpmdW5jdGlvbjA8dm9pZD4gPigpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDEuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWZjODA0Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwxLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCAoQykgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDA1LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgbmRuYm9vc3Q7Ci0KLWludAotdGVzdF9tYWluKGludCwgY2hhcipbXSkKLXsKLSAgZnVuY3Rpb24wPGludD4gZjE7Ci0gIGZ1bmN0aW9uMDxpbnQ+IGYyOwotCi0gIGlmIChmMSA9PSBmMikgewotICB9Ci0KLSAgQk9PU1RfRVJST1IoIlRoaXMgc2hvdWxkIG5vdCBoYXZlIGNvbXBpbGVkLiIpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDIuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzRjMDRhLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCAoQykgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDA1LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgbmRuYm9vc3Q7Ci0KLXN0YXRpYyBpbnQgYmFkX2ZuKGZsb2F0IGYpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZik7IH0KLQotaW50Ci10ZXN0X21haW4oaW50LCBjaGFyKltdKQotewotICBmdW5jdGlvbjA8aW50PiBmMTsKLSAgZjEgPSBiYWRfZm47Ci0KLSAgQk9PU1RfRVJST1IoIlRoaXMgc2hvdWxkIG5vdCBoYXZlIGNvbXBpbGVkLiIpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3R5cGVvZl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90eXBlb2ZfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZDBkOWQuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3R5cGVvZl90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDA4LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uL2Z1bmN0aW9uX3R5cGVvZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVvZi90eXBlb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotCi12b2lkIGYobmRuYm9vc3Q6OmZ1bmN0aW9uMDx2b2lkPiBmLCBuZG5ib29zdDo6ZnVuY3Rpb24wPHZvaWQ+IGcpCi17Ci0gIEJPT1NUX1NUQVRJQ19BU1NFUlQoKG5kbmJvb3N0Ojppc19zYW1lPG5kbmJvb3N0OjpmdW5jdGlvbjA8dm9pZD4sIEJPT1NUX1RZUEVPRihmID0gZyk+Ojp2YWx1ZSkpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2xhbWJkYV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9sYW1iZGFfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MjgxZmEuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L2xhbWJkYV90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAyLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxjc3RkbGliPgotCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9sYW1iZGEvbGFtYmRhLmhwcD4KLSNpbmNsdWRlIDxib29zdC9sYW1iZGEvYmluZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotCi1zdGF0aWMgdW5zaWduZWQKLWZ1bmNfaW1wbChpbnQgYXJnMSwgYm9vbCBhcmcyLCBkb3VibGUgYXJnMykKLXsKLSAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLSAgcmV0dXJuIGFicyAoc3RhdGljX2Nhc3Q8aW50PigoYXJnMiA/IGFyZzEgOiAyICogYXJnMSkgKiBhcmczKSk7Ci19Ci0KLWludCB0ZXN0X21haW4oaW50LCBjaGFyKltdKQotewotICB1c2luZyBuZG5ib29zdDo6ZnVuY3Rpb247Ci0gIHVzaW5nIG5hbWVzcGFjZSBuZG5ib29zdDo6bGFtYmRhOwotCi0gIGZ1bmN0aW9uIDx1bnNpZ25lZChib29sLCBkb3VibGUpPiBmMSA9IGJpbmQoZnVuY19pbXBsLCAxNSwgXzEsIF8yKTsKLSAgZnVuY3Rpb24gPHVuc2lnbmVkKGRvdWJsZSk+ICAgICAgIGYyID0gbmRuYm9vc3Q6OmxhbWJkYTo6YmluZChmMSwgZmFsc2UsIF8xKTsKLSAgZnVuY3Rpb24gPHVuc2lnbmVkKCk+ICAgICAgICAgICAgIGYzID0gbmRuYm9vc3Q6OmxhbWJkYTo6YmluZChmMiwgNC4wKTsKLQotICBmMygpOwotCi0gIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9jeHg5OC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9jeHg5OC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWJhYTQuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L21lbV9mdW5fY3h4OTguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLy8gRnVuY3Rpb24gbGlicmFyeQotCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgotCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLwotCi0gICAgCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotCi1zdHJ1Y3QgWCB7Ci0gIGludCBmb28oaW50KTsKLSAgc3RkOjpvc3RyZWFtJiBmb28yKHN0ZDo6b3N0cmVhbSYpIGNvbnN0OwotfTsKLWludCBYOjpmb28oaW50IHgpIHsgcmV0dXJuIC14OyB9Ci1zdGQ6Om9zdHJlYW0mIFg6OmZvbzIoc3RkOjpvc3RyZWFtJiB4KSBjb25zdCB7IHJldHVybiB4OyB9Ci0KLWludCBtYWluKCkKLXsKLSAgICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChYKiwgaW50KT4gZjsKLSAgICBuZG5ib29zdDo6ZnVuY3Rpb248c3RkOjpvc3RyZWFtJiAoWCosIHN0ZDo6b3N0cmVhbSYpPiBmMjsKLQotICAgIGYgPSAmWDo6Zm9vOwotICAgIGYyID0gJlg6OmZvbzI7Ci0KLSAgICBYIHg7Ci0gICAgQk9PU1RfVEVTVChmKCZ4LCA1KSA9PSAtNSk7Ci0gICAgQk9PU1RfVEVTVChmMigmeCwgbmRuYm9vc3Q6OnJlZihzdGQ6OmNvdXQpKSA9PSBzdGQ6OmNvdXQpOwotCi0gICAgcmV0dXJuIDo6bmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9tZW1fZnVuX3BvcnRhYmxlLmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9tZW1fZnVuX3BvcnRhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4Zjc1Zi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9wb3J0YWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vLyBGdW5jdGlvbiBsaWJyYXJ5Ci0KLS8vIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIERvdWdsYXMgR3JlZ29yCi0KLS8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgCi0KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvCi0KLSAgICAKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0KLXN0cnVjdCBYIHsKLSAgaW50IGZvbyhpbnQpOwotICBzdGQ6Om9zdHJlYW0mIGZvbzIoc3RkOjpvc3RyZWFtJikgY29uc3Q7Ci19OwotaW50IFg6OmZvbyhpbnQgeCkgeyByZXR1cm4gLXg7IH0KLXN0ZDo6b3N0cmVhbSYgWDo6Zm9vMihzdGQ6Om9zdHJlYW0mIHgpIGNvbnN0IHsgcmV0dXJuIHg7IH0KLQotaW50IG1haW4oKQotewotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjI8aW50LCBYKiwgaW50PiBmOwotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjI8c3RkOjpvc3RyZWFtJiwgWCosIHN0ZDo6b3N0cmVhbSY+IGYyOwotCi0gICAgZiA9ICZYOjpmb287Ci0gICAgZjIgPSAmWDo6Zm9vMjsKLQotICAgIFggeDsKLSAgICBCT09TVF9URVNUKGYoJngsIDUpID09IC01KTsKLSAgICBCT09TVF9URVNUKGYyKCZ4LCBuZG5ib29zdDo6cmVmKHN0ZDo6Y291dCkpID09IHN0ZDo6Y291dCk7Ci0KLSAgICByZXR1cm4gOjpuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L25vdGhyb3dfc3dhcC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvbm90aHJvd19zd2FwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4ZDA1ZC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uL3Rlc3Qvbm90aHJvd19zd2FwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDA4LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZwotCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0KLXN0cnVjdCB0cmllZF90b19jb3B5IHsgfTsKLQotc3RydWN0IE1heWJlVGhyb3dPbkNvcHkgewotICBNYXliZVRocm93T25Db3B5KGludCB2YWx1ZSA9IDApIDogdmFsdWUodmFsdWUpIHsgfQotCi0gIE1heWJlVGhyb3dPbkNvcHkoY29uc3QgTWF5YmVUaHJvd09uQ29weSYgb3RoZXIpIDogdmFsdWUob3RoZXIudmFsdWUpIHsKLSAgICBpZiAodGhyb3dPbkNvcHkpCi0gICAgICB0aHJvdyB0cmllZF90b19jb3B5KCk7Ci0gIH0KLQotICBNYXliZVRocm93T25Db3B5JiBvcGVyYXRvcj0oY29uc3QgTWF5YmVUaHJvd09uQ29weSYgb3RoZXIpIHsKLSAgICBpZiAodGhyb3dPbkNvcHkpCi0gICAgICB0aHJvdyB0cmllZF90b19jb3B5KCk7Ci0gICAgdmFsdWUgPSBvdGhlci52YWx1ZTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBpbnQgb3BlcmF0b3IoKSgpIHsgcmV0dXJuIHZhbHVlOyB9Ci0KLSAgaW50IHZhbHVlOwotCi0gIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24gb2JqZWN0IGRvZXNuJ3QgdHJpZ2dlciB0aGUKLSAgLy8gc21hbGwtb2JqZWN0IG9wdGltaXphdGlvbiBpbiBGdW5jdGlvbi4KLSAgZmxvYXQgcGFkZGluZ1sxMDBdOwotCi0gIHN0YXRpYyBib29sIHRocm93T25Db3B5OwotfTsKLQotYm9vbCBNYXliZVRocm93T25Db3B5Ojp0aHJvd09uQ29weSA9IGZhbHNlOwotCi1pbnQgdGVzdF9tYWluKGludCwgY2hhciogW10pCi17Ci0gIG5kbmJvb3N0OjpmdW5jdGlvbjA8aW50PiBmOwotICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZzsKLQotICBNYXliZVRocm93T25Db3B5Ojp0aHJvd09uQ29weSA9IGZhbHNlOwotICBmID0gTWF5YmVUaHJvd09uQ29weSgxKTsKLSAgZyA9IE1heWJlVGhyb3dPbkNvcHkoMik7Ci0gIEJPT1NUX0NIRUNLKGYoKSA9PSAxKTsKLSAgQk9PU1RfQ0hFQ0soZygpID09IDIpOwotCi0gIE1heWJlVGhyb3dPbkNvcHk6OnRocm93T25Db3B5ID0gdHJ1ZTsKLSAgZi5zd2FwKGcpOwotICBCT09TVF9DSEVDSyhmKCkgPT0gMik7Ci0gIEJPT1NUX0NIRUNLKGcoKSA9PSAxKTsKLSAgCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L3JlZ3Jlc3Npb24uY2ZnIGIvbGlicy9mdW5jdGlvbi90ZXN0L3JlZ3Jlc3Npb24uY2ZnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTQ0MjUzLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9yZWdyZXNzaW9uLmNmZworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIHJlZ3Jlc3Npb24gdGVzdCBjb25maWd1cmF0aW9uIGZpbGUKLQotLy8gRnJvbSB0aGUgYm9vc3Qvc3RhdHVzIGRpcmVjdG9yeSwgcnVuCi0vLyAuL3JlZ3Jlc3Npb24gLS10ZXN0cyAuLi9saWJzL2Z1bmN0aW9uL3Rlc3QvcmVncmVzc2lvbi5jZmcgLW8gZnVuY3Rpb24uaHRtbAotCi0KLXJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvYWxsb2NhdG9yX3Rlc3QuY3BwCi1ydW4gbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX25fdGVzdC5jcHAKLXJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAKLWNvbXBpbGUtZmFpbCBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdF9mYWlsMS5jcHAKLWNvbXBpbGUtZmFpbCBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdF9mYWlsMi5jcHAKLXJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvbWl4aW5fdGVzdC5jcHAKLXJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvcG9saWN5X3Rlc3QuY3BwCi1ydW4gbGlicy9mdW5jdGlvbi90ZXN0L3N0YXRlbGVzc190ZXN0LmNwcApkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L3N0YXRlbGVzc190ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9zdGF0ZWxlc3NfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NjdjN2QuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L3N0YXRlbGVzc190ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCi0KLSNpbmNsdWRlIDxib29zdC90ZXN0L21pbmltYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0KLXN0cnVjdCBzdGF0ZWxlc3NfaW50ZWdlcl9hZGQgewotICBpbnQgb3BlcmF0b3IoKShpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHgreTsgfQotCi0gIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkKLSAgewotICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiQ2Fubm90IGFsbG9jYXRlIGEgc3RhdGVsZXNzX2ludGVnZXJfYWRkIik7Ci0gIH0KLQotICB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIHApCi0gIHsKLSAgICByZXR1cm4gcDsKLSAgfQotCi0gIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpCi0gIHsKLSAgfQotfTsKLQotaW50IHRlc3RfbWFpbihpbnQsIGNoYXIqW10pCi17Ci0gIG5kbmJvb3N0OjpmdW5jdGlvbjI8aW50LCBpbnQsIGludD4gZjsKLSAgZiA9IHN0YXRlbGVzc19pbnRlZ2VyX2FkZCgpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L3N0ZF9iaW5kX2N4eDk4LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9jeHg5OC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTNjZWUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L3N0ZF9iaW5kX2N4eDk4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vIEZ1bmN0aW9uIGxpYnJhcnkKLQotLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRG91Z2xhcyBHcmVnb3IKLQotLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKLS8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAKLQotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy8KLQotICAgIAotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotCi1zdHJ1Y3QgWCB7Ci0gIGludCBmb28oaW50KTsKLX07Ci1pbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQotCi1pbnQgbWFpbigpCi17Ci0gICAgICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChpbnQpPiBmOwotICBYIHg7Ci0gIGYgPSBzdGQ6OmJpbmQxc3QoCi0gICAgICAgIHN0ZDo6bWVtX2Z1bigmWDo6Zm9vKSwgJngpOwotICBmKDUpOyAvLyBDYWxsIHguZm9vKDUpCi0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3RkX2JpbmRfcG9ydGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWNhNzQ2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9wb3J0YWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLyBGdW5jdGlvbiBsaWJyYXJ5Ci0KLS8vIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIERvdWdsYXMgR3JlZ29yCi0KLS8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgCi0KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvCi0KLSAgICAKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLQotc3RydWN0IFggewotICBpbnQgZm9vKGludCk7Ci19OwotaW50IFg6OmZvbyhpbnQgeCkgeyByZXR1cm4gLXg7IH0KLQotaW50IG1haW4oKQotewotICAgICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMTxpbnQsIGludD4gZjsKLSAgWCB4OwotICBmID0gc3RkOjpiaW5kMXN0KAotICAgICAgICBzdGQ6Om1lbV9mdW4oJlg6OmZvbyksICZ4KTsKLSAgZig1KTsgLy8gQ2FsbCB4LmZvbyg1KQotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3VtX2F2Z19jeHg5OC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3VtX2F2Z19jeHg5OC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OWQ0ZWEuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L3N1bV9hdmdfY3h4OTguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8gRnVuY3Rpb24gbGlicmFyeQotCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgotCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLwotCi0gICAgCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi12b2lkIGRvX3N1bV9hdmcoaW50IHZhbHVlc1tdLCBpbnQgbiwgaW50JiBzdW0sIGZsb2F0JiBhdmcpCi17Ci0gIHN1bSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgIHN1bSArPSB2YWx1ZXNbaV07Ci0gIGF2ZyA9IChmbG9hdClzdW0gLyBuOwotfQotaW50IG1haW4oKQotewotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjx2b2lkIChpbnQgdmFsdWVzW10sIGludCBuLCBpbnQmIHN1bSwgZmxvYXQmIGF2Zyk+IHN1bV9hdmc7Ci0gICAgc3VtX2F2ZyA9ICZkb19zdW1fYXZnOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3VtX2F2Z19wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3VtX2F2Z19wb3J0YWJsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZGU4ZmUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbi90ZXN0L3N1bV9hdmdfcG9ydGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8gRnVuY3Rpb24gbGlicmFyeQotCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgotCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAotCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLwotCi0gICAgCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi12b2lkIGRvX3N1bV9hdmcoaW50IHZhbHVlc1tdLCBpbnQgbiwgaW50JiBzdW0sIGZsb2F0JiBhdmcpCi17Ci0gIHN1bSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgIHN1bSArPSB2YWx1ZXNbaV07Ci0gIGF2ZyA9IChmbG9hdClzdW0gLyBuOwotfQotaW50IG1haW4oKQotewotICAgIG5kbmJvb3N0OjpmdW5jdGlvbjQ8dm9pZCwgaW50KiwgaW50LCBpbnQmLCBmbG9hdCY+IHN1bV9hdmc7Ci0gICAgc3VtX2F2ZyA9ICZkb19zdW1fYXZnOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvYmluZGVycy5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2JpbmRlcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjMmM0Yi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvYmluZGVycy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj4KLQotICA8dGl0bGU+Qm9vc3QgRnVuY3Rpb24gT2JqZWN0IEFkYXB0ZXIgTGlicmFyeTwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgotICA8dGFibGUgYm9yZGVyPSIxIiBiZ2NvbG9yPSIjMDA3RjdGIiBjZWxscGFkZGluZz0iMiIgc3VtbWFyeT0iIj4KLSAgICA8dHI+Ci0gICAgICA8dGQgYmdjb2xvcj0iI0ZGRkZGRiI+PGltZyBzcmM9Ii4uLy4uL2Jvb3N0LnBuZyIgYWx0PQotICAgICAgImJvb3N0LnBuZyAoNjg5NyBieXRlcykiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkhvbWU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9saWJyYXJpZXMuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5MaWJyYXJpZXM8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvcGVvcGxlLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+UGVvcGxlPC9iaWc+PC9mb250PjwvYT48L3RkPgotCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9mYXEuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5GQVE8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9tb3JlL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+TW9yZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDxoMT5CaW5kZXJzPC9oMT4KLQotICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KLSAgcHJvdmlkZXMgZW5oYW5jZWQgdmVyc2lvbnMgb2YgYm90aCB0aGUgYmluZGVyIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycyBmcm9tCi0gIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeSAoJnNlY3Q7MjAuMy42KTo8L3A+Ci0KLSAgPHVsPgotICAgIDxsaT48dHQ+YmluZGVyMXN0PC90dD48L2xpPgotCi0gICAgPGxpPjx0dD5iaW5kZXIybmQ8L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+QXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBoZWxwZXIgZnVuY3Rpb25zPC9wPgotCi0gIDx1bD4KLSAgICA8bGk+PHR0PmJpbmQxc3Q8L3R0PjwvbGk+Ci0KLSAgICA8bGk+PHR0PmJpbmQybmQ8L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+VGhlIGtleSBiZW5lZml0IG9mIHRoZXNlIGFkYXB0ZXJzIG92ZXIgdGhvc2UgaW4gdGhlIFN0YW5kYXJkIExpYnJhcnkgaXMKLSAgdGhleSBhdm9pZCB0aGUgcHJvYmxlbSBvZiA8YSBocmVmPSIjcmVmcmVmIj5yZWZlcmVuY2VzIHRvCi0gIHJlZmVyZW5jZXMuPC9hPjwvcD4KLQotICA8aDM+VXNhZ2U8L2gzPgotCi0gIDxwPlVzYWdlIGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQgYmluZGVycy4gRm9yIGV4YW1wbGUsPC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci1jbGFzcyBGb28gewotcHVibGljOgotICB2b2lkIGJhcihzdGQ6Om9zdHJlYW0gJmFtcDspOwotICAvLyAuLi4KLX07Ci0vLyAuLi4KLXN0ZDo6dmVjdG9yJmx0O0ZvbyZndDsgYzsKLS8vIC4uLgotc3RkOjpmb3JfZWFjaChjLmJlZ2luKCksIGMuZW5kKCksIAotICAgICAgICAgICAgICBib29zdDo6YmluZDJuZChib29zdDo6bWVtX2Z1bl9yZWYoJmFtcDtGb286OmJhciksIHN0ZDo6Y291dCkpOwotPC9wcmU+Ci0gIDwvYmxvY2txdW90ZT4KLQotICA8aDMgaWQ9InJlZnJlZiI+UmVmZXJlbmNlcyB0byBSZWZlcmVuY2VzPC9oMz4KLQotICA8cD5Db25zaWRlciB0aGUgdXNhZ2UgZXhhbXBsZSBhYm92ZTwvcD4KLQotICA8YmxvY2txdW90ZT4KLSAgICA8cHJlPgotY2xhc3MgRm9vIHsKLXB1YmxpYzoKLSAgdm9pZCBiYXIoPHN0cm9uZz5zdGQ6Om9zdHJlYW0gJmFtcDs8L3N0cm9uZz4pOwotICAvLyAuLi4KLX07Ci0vLyAuLi4KLXN0ZDo6Zm9yX2VhY2goYy5iZWdpbigpLCBjLmVuZCgpLCAKLSAgICAgICAgICAgICAgYm9vc3Q6OmJpbmQybmQoYm9vc3Q6Om1lbV9mdW5fcmVmKCZhbXA7Rm9vOjpiYXIpLCBzdGQ6OmNvdXQpKTsKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+SWYgdGhpcyBoYWQgYmVlbiB3cml0dGVuIHVzaW5nIDx0dD5zdGQ6OmJpbmQybmQ8L3R0PiBhbmQKLSAgPHR0PnN0ZDo6bWVtX2Z1bl9yZWY8L3R0PiwgaXQgd291bGQgYmUgdW5saWtlbHkgdG8gY29tcGlsZS48L3A+Ci0KLSAgPHA+VGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgPHR0PmJhcjwvdHQ+IHRha2VzIGEgcmVmZXJlbmNlIGFyZ3VtZW50LiBUaGUKLSAgU3RhbmRhcmQgZGVmaW5lcyA8dHQ+c3RkOjptZW1fZnVuX3JlZjwvdHQ+IHN1Y2ggdGhhdCBpdCBjcmVhdGVzIGEgZnVuY3Rpb24KLSAgb2JqZWN0IHdob3NlIDx0dD5zZWNvbmRfYXJndW1lbnRfdHlwZTwvdHQ+IHdpbGwgYmUKLSAgPHR0PnN0ZDo6b3N0cmVhbSZhbXA7PC90dD4uPC9wPgotCi0gIDxwPlRoZSBjYWxsIHRvIDx0dD5iaW5kMm5kPC90dD4gY3JlYXRlcyBhIDx0dD5iaW5kZXIybmQ8L3R0PiB3aGljaCB0aGUKLSAgU3RhbmRhcmQgZGVmaW5lcyBhcyBmb2xsb3dzOjwvcD4KLQotICA8YmxvY2txdW90ZT4KLSAgICA8cHJlPgotdGVtcGxhdGUgJmx0O2NsYXNzIE9wZXJhdGlvbiZndDsKLWNsYXNzIGJpbmRlcjJuZAotICAgIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O3R5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlJmd0OyB7Ci0uLi4KLXB1YmxpYzoKLSAgYmluZGVyMm5kKGNvbnN0IE9wZXJhdGlvbiZhbXA7IHgsCi0gICAgICAgICAgICA8c3Ryb25nPmNvbnN0IHR5cGVuYW1lIE9wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmYW1wOyB5PC9zdHJvbmc+KTsKLSAgLi4uCi08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPlNpbmNlIG91ciBvcGVyYXRpb24ncyA8dHQ+c2Vjb25kX2FyZ3VtZW50X3R5cGU8L3R0PiBpcwotICA8dHQ+c3RkOjpvc3RyZWFtJmFtcDs8L3R0PiwgdGhlIHR5cGUgb2YgPHR0Pnk8L3R0PiBpbiB0aGUgY29uc3RydWN0b3Igd291bGQKLSAgYmUgPHR0PnN0ZDo6b3N0cmVhbSZhbXA7JmFtcDs8L3R0Pi4gU2luY2UgeW91IGNhbm5vdCBoYXZlIGEgcmVmZXJlbmNlIHRvIGEKLSAgcmVmZXJlbmNlLCBhdCB0aGlzIHBvaW50IHdlIHNob3VsZCBnZXQgYSBjb21waWxhdGlvbiBlcnJvciBiZWNhdXNlCi0gIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcyBhcmUgaWxsZWdhbCBpbiBDKysgKGJ1dCBzZWUgPGEgaHJlZj0KLSAgImh0dHA6Ly9hbnViaXMuZGt1dWcuZGsvanRjMS9zYzIyL3dnMjEvZG9jcy9jd2dfYWN0aXZlLmh0bWwjMTA2Ij5DKysKLSAgU3RhbmRhcmQgY29yZSBsYW5ndWFnZSBhY3RpdmUgaXNzdWVzIGxpc3Q8L2E+KS48L3A+Ci0KLSAgPHA+VGhlIGJpbmRlcnMgaW4gdGhpcyBsaWJyYXJ5IGF2b2lkIHRoaXMgcHJvYmxlbSBieSB1c2luZyB0aGUgQm9vc3QKLSAgPHR0PjxhIGhyZWY9Ii4uL3V0aWxpdHkvY2FsbF90cmFpdHMuaHRtIj5jYWxsX3RyYWl0czwvYT48L3R0PgotICB0ZW1wbGF0ZXMuPC9wPgotCi0gIDxwPk91ciBjb25zdHJ1Y3RvciBpcyBkZWNsYXJlZDwvcD4KLQotICA8YmxvY2txdW90ZT4KLSAgICA8cHJlPgotYmluZGVyMm5kKGNvbnN0IE9wZXJhdGlvbiZhbXA7IHgsCi0gICAgICAgICAgPHN0cm9uZz50eXBlbmFtZSBjYWxsX3RyYWl0cyZsdDsKLSAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzJmx0O09wZXJhdGlvbiZndDs6OnNlY29uZF9hcmd1bWVudF90eXBlCi0gICAgICAgICAgJmd0Ozo6cGFyYW1fdHlwZSB5PC9zdHJvbmc+KQotPC9wcmU+Ci0gIDwvYmxvY2txdW90ZT4KLQotICA8cD5BcyBhIHJlc3VsdCwgPHR0Pnk8L3R0PiBoYXMgYSB0eXBlIG9mIDx0dD5zdGQ6Om9zdHJlYW0mYW1wOzwvdHQ+LCBhbmQKLSAgb3VyIGV4YW1wbGUgY29tcGlsZXMuPC9wPgotICA8aHI+Ci0KLSAgPHA+PGEgaHJlZj0iaHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPXJlZmVyZXIiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Ci0gICIuLi8uLi9kb2MvaW1hZ2VzL3ZhbGlkLWh0bWw0MDEucG5nIiBhbHQ9IlZhbGlkIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwiCi0gIGhlaWdodD0iMzEiIHdpZHRoPSI4OCI+PC9hPjwvcD4KLQotICA8cD5SZXZpc2VkIAotICA8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBzLXR5cGU9IkVESVRFRCIgcy1mb3JtYXQ9IiVkICVCLCAlWSIgc3RhcnRzcGFuIC0tPjAyCi0gIERlY2VtYmVyLCAyMDA2PCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgZW5kc3BhbiBpLWNoZWNrc3VtPSIzODUxMCIgLS0+PC9wPgotCi0gIDxwPjxpPkNvcHlyaWdodCAmY29weTsgMjAwMCBDYWRlbnphIE5ldyBaZWFsYW5kIEx0ZC48L2k+PC9wPgotCi0gIDxwPjxpPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKLSAgY29weSBhdCA8YSBocmVmPQotICAiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvaT48L3A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvSmFtZmlsZSBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjUzMzM2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotCi0jIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotIwotIyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0jIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6L1wvd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi11c2luZyBxdWlja2Jvb2sgOwotCi14bWwgZmFjdG9yeSA6IGZhY3RvcnkucWJrIDsKLWJvb3N0Ym9vayBzdGFuZGFsb25lIDogZmFjdG9yeQotICA6Ci0gICAgICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgotICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LmxpYnJhcmllcz0uLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtCi0gICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuc2VjdGlvbi5kZXB0aD0wCi0gICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuZmlyc3Quc2VjdGlvbnM9MAotICAgICAgICA8eHNsOnBhcmFtPmdlbmVyYXRlLnNlY3Rpb24udG9jLmxldmVsPTIKLSAgICAgICAgPHhzbDpwYXJhbT50b2MubWF4LmRlcHRoPTEKLSAgOwotCi0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9mYWN0b3J5LnFiayBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9mYWN0b3J5LnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhM2ZhZi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvZmFjdG9yeS5xYmsKKysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAsMCBAQAotW2xpYnJhcnkgQm9vc3QuRnVuY3Rpb25hbC9GYWN0b3J5Ci0gIFtxdWlja2Jvb2sgMS4zXQotICBbdmVyc2lvbiAxLjBdCi0gIFthdXRob3JzIFtTY2h3aW5nZXIsIFRvYmlhc11dCi0gIFtjb3B5cmlnaHQgMjAwNyAyMDA4IFRvYmlhcyBTY2h3aW5nZXJdCi0gIFtsaWNlbnNlCi0gICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLSAgICAgICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLSAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHRdKQotICBdCi0gIFtwdXJwb3NlIEZ1bmN0aW9uIG9iamVjdCB0ZW1wbGF0ZXMgZm9yIG9iamVjdCBjcmVhdGlvbi5dCi0gIFtjYXRlZ29yeSBoaWdoZXItb3JkZXJdCi0gIFtjYXRlZ29yeSBnZW5lcmljXQotICBbbGFzdC1yZXZpc2lvbiAkRGF0ZTogMjAwOC8xMS8wMSAyMTo0NDo1MiAkXQotXQotCi1bZGVmIF9fYm9vc3RfYmluZF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCBCb29zdC5CaW5kXV0KLVtkZWYgX19ib29zdF9fYmluZF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCBgYm9vc3Q6OmJpbmRgXV0KLQotW2RlZiBfX2Jvb3N0X19mb3J3YXJkX2FkYXB0ZXJfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9pbmRleC5odG1sIGBib29zdDo6Zm9yd2FyZF9hZGFwdGVyYF1dCi1bZGVmIF9fZnVzaW9uX2Z1bmN0aW9uYWxfYWRhcHRlcnNfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVzaW9uL2RvYy9odG1sL2Z1bmN0aW9uYWwuaHRtbCBGdXNpb24gRnVuY3Rpb25hbCBBZGFwdGVyc11dCi0KLVtkZWYgX19ib29zdF9mdW5jdGlvbl9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvZnVuY3Rpb24uaHRtbCBCb29zdC5GdW5jdGlvbl1dCi1bZGVmIF9fYm9vc3RfX2Z1bmN0aW9uX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIGBib29zdDo6ZnVuY3Rpb25gXV0KLQotW2RlZiBfX3NtYXJ0X3BvaW50ZXJfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL2luZGV4Lmh0bWwgU21hcnQgUG9pbnRlcl1dCi1bZGVmIF9fc21hcnRfcG9pbnRlcnNfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL2luZGV4Lmh0bWwgU21hcnQgUG9pbnRlcnNdXQotW2RlZiBfX2Jvb3N0X19zaGFyZWRfcHRyX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3NtYXJ0X3B0ci9zaGFyZWRfcHRyLmh0bSBgYm9vc3Q6OnNoYXJlZF9wdHJgXV0KLQotW2RlZiBfX3N0ZF9fbWFwX18gW0BodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvbWFwLmh0bWwgYHN0ZDo6bWFwYF1dCi1bZGVmIF9fc3RkX19zdHJpbmdfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9zdHJpbmcuaHRtbCBgc3RkOjpzdHJpbmdgXV0KLVtkZWYgX19hbGxvY2F0b3JfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCBBbGxvY2F0b3JdXQotW2RlZiBfX3N0ZF9hbGxvY2F0b3JfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCBBbGxvY2F0b3JdXQotW2RlZiBfX3N0ZF9hbGxvY2F0b3JzX18gW0BodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvY29uY2VwdHMvYWxsb2NhdG9yLmh0bWwgQWxsb2NhdG9yc11dCi0KLVtkZWYgX19ib29zdF9fcHRyX21hcF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9wdHJfY29udGFpbmVyL2RvYy9wdHJfbWFwLmh0bWwgYGJvb3N0OjpwdHJfbWFwYF1dCi0KLVtkZWYgX19ib29zdF9fZmFjdG9yeV9fIGBib29zdDo6ZmFjdG9yeWBdCi1bZGVmIF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXyBgYm9vc3Q6OnZhbHVlX2ZhY3RvcnlgXQotCi1bZGVmIF9fZmFjdG9yeV9fIGBmYWN0b3J5YF0KLVtkZWYgX192YWx1ZV9mYWN0b3J5X18gYHZhbHVlX2ZhY3RvcnlgXQotCi0KLVtzZWN0aW9uIEJyaWVmIERlc2NyaXB0aW9uXQotCi1UaGUgdGVtcGxhdGUgX19ib29zdF9fZmFjdG9yeV9fIGxldHMgeW91IGVuY2Fwc3VsYXRlIGEgYG5ld2AgZXhwcmVzc2lvbgotYXMgYSBmdW5jdGlvbiBvYmplY3QsIF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXyBlbmNhcHN1bGF0ZXMgYSBjb25zdHJ1Y3RvcgotaW52b2NhdGlvbiB3aXRob3V0IGBuZXdgLgotCi0gICAgX19ib29zdF9fZmFjdG9yeV9fPFQqPigpKGFyZzEsYXJnMixhcmczKSAKLSAgICAvLyBzYW1lIGFzIG5ldyBUKGFyZzEsYXJnMixhcmczKQotCi0gICAgX19ib29zdF9fdmFsdWVfZmFjdG9yeV9fPFQ+KCkoYXJnMSxhcmcyLGFyZzMpCi0gICAgLy8gc2FtZSBhcyBUKGFyZzEsYXJnMixhcmczKQotCi1Gb3IgdGVjaG5pY2FsIHJlYXNvbnMgdGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24gb2JqZWN0cyBoYXZlIHRvIGJlCi1MVmFsdWVzLiBBIGZhY3RvcnkgdGhhdCBhbHNvIGFjY2VwdHMgUlZhbHVlcyBjYW4gYmUgY29tcG9zZWQgdXNpbmcgdGhlCi1fX2Jvb3N0X19mb3J3YXJkX2FkYXB0ZXJfXyBvciBfX2Jvb3N0X19iaW5kX18uCi0KLVtlbmRzZWN0XQotCi1bc2VjdGlvbiBCYWNrZ3JvdW5kXQotCi1JbiB0cmFkaXRpb25hbCBPYmplY3QgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgYSBGYWN0b3J5IGlzIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcKLWFuIGludGVyZmFjZSBvZiBvbmUgb3IgbW9yZSBtZXRob2RzIHRoYXQgY29uc3RydWN0IG9iamVjdHMgY29uZm9ybWluZyB0byBrbm93bgotaW50ZXJmYWNlcy4KLQotICAgIC8vIGFzc3VtaW5nIGFfY29uY3JldGVfY2xhc3MgYW5kIGFub3RoZXJfY29uY3JldGVfY2xhc3MgYXJlIGRlcml2ZWQKLSAgICAvLyBmcm9tIGFuX2Fic3RyYWN0X2NsYXNzCi0KLSAgICBjbGFzcyBhX2ZhY3RvcnkKLSAgICB7Ci0gICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYW5fYWJzdHJhY3RfY2xhc3MqIGNyZWF0ZSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB+YV9mYWN0b3J5KCkgeyB9Ci0gICAgfTsKLQotICAgIGNsYXNzIGFfY29uY3JldGVfZmFjdG9yeSA6IHB1YmxpYyBhX2ZhY3RvcnkKLSAgICB7Ci0gICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYW5fYWJzdHJhY3RfY2xhc3MqIGNyZWF0ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgYV9jb25jcmV0ZV9jbGFzcygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGNsYXNzIGFub3RoZXJfY29uY3JldGVfZmFjdG9yeSA6IHB1YmxpYyBhX2ZhY3RvcnkKLSAgICB7Ci0gICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYW5fYWJzdHJhY3RfY2xhc3MqIGNyZWF0ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgYW5vdGhlcl9jb25jcmV0ZV9jbGFzcygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFsuLi5dCi0KLSAgICBpbnQgbWFpbigpCi0gICAgewotICAgICAgICBfX2Jvb3N0X19wdHJfbWFwX188X19zdGRfX3N0cmluZ19fLGFfZmFjdG9yeT4gZmFjdG9yaWVzOwotCi0gICAgICAgIC8vIFsuLi5dCi0KLSAgICAgICAgZmFjdG9yaWVzLmluc2VydCgiYV9uYW1lIixzdGQ6OmF1dG9fcHRyPGFfZmFjdG9yeT4oCi0gICAgICAgICAgICBuZXcgYV9jb25jcmV0ZV9mYWN0b3J5KSk7Ci0gICAgICAgIGZhY3Rvcmllcy5pbnNlcnQoImFub3RoZXJfbmFtZSIsc3RkOjphdXRvX3B0cjxhX2ZhY3Rvcnk+KAotICAgICAgICAgICAgbmV3IGFub3RoZXJfY29uY3JldGVfZmFjdG9yeSkpOwotCi0gICAgICAgIC8vIFsuLi5dCi0KLSAgICAgICAgc3RkOjphdXRvX3B0cjxhbl9hYnN0cmFjdF9jbGFzcz4geChmYWN0b3JpZXMuYXQoc29tZV9uYW1lKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgLy8gWy4uLl0KLSAgICB9Ci0KLVRoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwgZHJhd2JhY2tzLiBUaGUgbW9zdCBvYnZpb3VzIG9uZSBpcyB0aGF0IHRoZXJlIGlzCi1sb3RzIG9mIGJvaWxlcnBsYXRlIGNvZGUuIEluIG90aGVyIHdvcmRzIHRoZXJlIGlzIHRvbyBtdWNoIGNvZGUgdG8gZXhwcmVzcwotYSByYXRoZXIgc2ltcGxlIGludGVudGlvbi4gV2UgY291bGQgdXNlIHRlbXBsYXRlcyB0byBnZXQgcmlkIG9mIHNvbWUgb2YgaXQKLWJ1dCB0aGUgYXBwcm9hY2ggcmVtYWlucyBpbmZsZXhpYmxlOiAKLQotKiBXZSBtYXkgd2FudCBhIGZhY3RvcnkgdGhhdCB0YWtlcyBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8KLSAgdGhlIGNvbnN0cnVjdG9yLAotKiB3ZSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIHNtYXJ0IHBvaW50ZXJzLAotKiB3ZSBtYXkgd2FudCBzZXZlcmFsIG1lbWJlciBmdW5jdGlvbnMgdG8gY3JlYXRlIGRpZmZlcmVudCBraW5kcyBvZgotICBvYmplY3RzLAotKiB3ZSBtaWdodCBub3QgbmVjZXNzYXJpbHkgbmVlZCBhIHBvbHltb3JwaGljIGJhc2UgY2xhc3MgZm9yIHRoZSBvYmplY3RzLAotKiBhcyB3ZSB3aWxsIHNlZSwgd2UgZG8gbm90IG5lZWQgYSBmYWN0b3J5IGJhc2UgY2xhc3MgYXQgYWxsLCAKLSogd2UgbWlnaHQgd2FudCB0byBqdXN0IGNhbGwgdGhlIGNvbnN0cnVjdG9yIC0gd2l0aG91dCBgbmV3YCB0byBjcmVhdGUKLSAgYW4gb2JqZWN0IG9uIHRoZSBzdGFjaywgYW5kCi0qIGZpbmFsbHkgd2UgbWlnaHQgd2FudCB0byB1c2UgY3VzdG9taXplZCBtZW1vcnkgbWFuYWdlbWVudC4KLQotRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCB1c2luZyBmdW5jdGlvbiBvYmplY3RzIGFuZCBnZW5lcmljIEJvb3N0IGNvbXBvbmVudHMKLWZvciB0aGVpciBjb21wb3NpdGlvbiwgRGVzaWduIFBhdHRlcm5zIHRoYXQgZGVzY3JpYmUgY2FsbGJhY2sgbWVjaGFuaXNtcwotKHR5cGljYWxseSByZXF1aXJpbmcgYSBoaWdoIHBlcmNlbnRhZ2Ugb2YgYm9pbGVycGxhdGUgY29kZSB3aXRoIHB1cmUgT2JqZWN0Ci1PcmllbnRlZCBtZXRob2RvbG9neSkgYmVjb21lIGltcGxlbWVudGFibGUgd2l0aCBqdXN0IGZldyBjb2RlIGxpbmVzIGFuZCB3aXRob3V0Ci1leHRyYSBjbGFzc2VzLiAKLQotRmFjdG9yaWVzIGFyZSBjYWxsYmFjayBtZWNoYW5pc21zIGZvciBjb25zdHJ1Y3RvcnMsIHNvIHdlIHByb3ZpZGUgdHdvIGNsYXNzCi10ZW1wbGF0ZXMsIF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXyBhbmQgX19ib29zdF9fZmFjdG9yeV9fLCB0aGF0IGVuY2Fwc3VsYXRlCi1vYmplY3QgY29uc3RydWN0aW9uIHZpYSBkaXJlY3QgYXBwbGljYXRpb24gb2YgdGhlIGNvbnN0cnVjdG9yIGFuZCB0aGUgYG5ld2AKLW9wZXJhdG9yLCByZXNwZWN0aXZlbHkuIAotCi1XZSBsZXQgdGhlIGZ1bmN0aW9uIG9iamVjdHMgZm9yd2FyZCB0aGVpciBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdGlvbgotZXhwcmVzc2lvbnMgdGhleSBlbmNhcHN1bGF0ZS4gT3ZlciB0aGlzIF9fYm9vc3RfX2ZhY3RvcnlfXyBvcHRpb25hbGx5IGFsbG93cwotdGhlIHVzZSBvZiBzbWFydCBwb2ludGVycyBhbmQgX19zdGRfYWxsb2NhdG9yc19fLgotCi1Db21waWxlLXRpbWUgcG9seW1vcnBoaXNtIGNhbiBiZSB1c2VkIHdoZXJlIGFwcHJvcHJpYXRlLAotCi0gICAgdGVtcGxhdGU8IGNsYXNzIFQgPgotICAgIHZvaWQgZG9fc29tZXRoaW5nKCkKLSAgICB7Ci0gICAgICAgIC8vIFsuLi5dCi0gICAgICAgIFQgeCA9IFQoYSxiKTsKLQotICAgICAgICAvLyBmb3IgY29uY2VwdHVhbGx5IHNpbWlsYXIgb2JqZWN0cyB4IHdlIG5laXRoZXIgbmVlZCB2aXJ0dWFsCi0gICAgICAgIC8vIGZ1bmN0aW9ucyBub3IgYSBjb21tb24gYmFzZSBjbGFzcyBpbiB0aGlzIGNvbnRleHQuCi0gICAgICAgIC8vIFsuLi5dCi0gICAgfQotCi1Ob3csIHRvIGFsbG93IGluaG9tb2dlbmVvdXMgc2lnbmF0dXJlcyBmb3IgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdHlwZXMgcGFzc2VkCi1pbiBmb3IgYFRgIHdlIGNhbiB1c2UgX192YWx1ZV9mYWN0b3J5X18gYW5kIF9fYm9vc3RfX2JpbmRfXyB0byBub3JtYWxpemUgYmV0d2VlbgotdGhlbS4gCi0KLSAgICB0ZW1wbGF0ZTwgY2xhc3MgVmFsdWVGYWN0b3J5ID4gCi0gICAgdm9pZCBkb19zb21ldGhpbmcoVmFsdWVGYWN0b3J5IG1ha2Vfb2JqID0gVmFsdWVGYWN0b3J5KCkpCi0gICAgewotICAgICAgICAvLyBbLi4uXQotICAgICAgICB0eXBlbmFtZSBWYWx1ZUZhY3Rvcnk6OnJlc3VsdF90eXBlIHggPSBtYWtlX29iaihhLGIpOwotCi0gICAgICAgIC8vIGZvciBjb25jZXB0dWFsbHkgc2ltaWxhciBvYmplY3RzIHggd2UgbmVpdGhlciBuZWVkIHZpcnR1YWwKLSAgICAgICAgLy8gZnVuY3Rpb25zIG5vciBhIGNvbW1vbiBiYXNlIGNsYXNzIGluIHRoaXMgY29udGV4dC4KLSAgICAgICAgLy8gWy4uLl0KLSAgICB9Ci0KLSAgICBpbnQgbWFpbigpCi0gICAgewotICAgICAgICAvLyBbLi4uXQotCi0gICAgICAgIGRvX3NvbWV0aGluZyhfX2Jvb3N0X192YWx1ZV9mYWN0b3J5X188WD4oKSk7Ci0gICAgICAgIGRvX3NvbWV0aGluZyhib29zdDo6YmluZChfX2Jvb3N0X192YWx1ZV9mYWN0b3J5X188WT4oKSxfMSw1LF8yKSk7Ci0gICAgICAgIC8vIGNvbnN0cnVjdCBYKGEsYikgYW5kIFkoYSw1LGIpLCByZXNwZWN0aXZlbHkuCi0KLSAgICAgICAgLy8gWy4uLl0KLSAgICB9Ci0KLU1heWJlIHdlIHdhbnQgb3VyIG9iamVjdHMgdG8gb3V0bGl2ZSB0aGUgZnVuY3Rpb24ncyBzY29wZSwgaW4gdGhpcyBjYXNlIHdlCi1oYXZlIHRvIHVzZSBkeW5hbWljIGFsbG9jYXRpb247Ci0KLSAgICB0ZW1wbGF0ZTwgY2xhc3MgRmFjdG9yeSA+Ci0gICAgd2hhdGV2ZXIgZG9fc29tZXRoaW5nKEZhY3RvcnkgbmV3X29iaiA9IEZhY3RvcnkoKSkKLSAgICB7Ci0gICAgICAgIHR5cGVuYW1lIEZhY3Rvcnk6OnJlc3VsdF90eXBlIHB0ciA9IG5ld19vYmooYSxiKTsKLQotICAgICAgICAvLyBhZ2Fpbiwgbm8gY29tbW9uIGJhc2UgY2xhc3Mgb3IgdmlydHVhbCBmdW5jdGlvbnMgbmVlZGVkLAotICAgICAgICAvLyB3ZSBjb3VsZCBlbmZvcmNlIGEgcG9seW1vcnBoaWMgYmFzZSBieSB3cml0aW5nIGUuZy4KLSAgICAgICAgLy8gICAgYm9vc3Q6OnNoYXJlZF9wdHI8YmFzZT4KLSAgICAgICAgLy8gaW5zdGVhZCBvZgotICAgICAgICAvLyAgICB0eXBlbmFtZSBGYWN0b3J5OjpyZXN1bHRfdHlwZQotICAgICAgICAvLyBhYm92ZS4KLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGFyZSBhbHNvIGZyZWUgdG8gaGF2ZSB0aGUgdHlwZSBlcmFzdXJlIGhhcHBlbiAKLSAgICAgICAgLy8gc29tZXdoZXJlIGVsc2UgKGUuZy4gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgZnVuY3Rpb24ncwotICAgICAgICAvLyByZXN1bHQgdHlwZSkuCi0KLSAgICAgICAgLy8gWy4uLl0KLSAgICB9Ci0KLSAgICAvLyBbLi4uIGNhbGwgZG9fc29tZXRoaW5nIGxpa2UgYWJvdmUgYnV0IHdpdGggX19mYWN0b3J5X18gaW5zdGVhZAotICAgIC8vIG9mIF9fdmFsdWVfZmFjdG9yeV9fXQotCi1BbHRob3VnaCB3ZSBtaWdodCBoYXZlIGNyZWF0ZWQgcG9seW1vcnBoaWMgb2JqZWN0cyBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwKLXdlIGhhdmUgdXNlZCBjb21waWxlIHRpbWUgcG9seW1vcnBoaXNtIGZvciB0aGUgZmFjdG9yeS4gSWYgd2Ugd2FudCB0byBlcmFzZQotdGhlIHR5cGUgb2YgdGhlIGZhY3RvcnkgYW5kIHRodXMgYWxsb3cgcG9seW1vcnBoaXNtIGF0IHJ1biB0aW1lLCB3ZSBjYW4KLXVzZSBfX2Jvb3N0X2Z1bmN0aW9uX18gdG8gZG8gc28uIFRoZSBmaXJzdCBleGFtcGxlIGNhbiBiZSByZXdyaXR0ZW4gYXMgCi1mb2xsb3dzLgotCi0gICAgdHlwZWRlZiBib29zdDo6ZnVuY3Rpb248IGFuX2Fic3RyYWN0X2NsYXNzKigpID4gYV9mYWN0b3J5OwotCi0gICAgLy8gWy4uLl0KLQotICAgIGludCBtYWluKCkKLSAgICB7Ci0gICAgICAgIF9fc3RkX19tYXBfXzxfX3N0ZF9fc3RyaW5nX18sYV9mYWN0b3J5PiBmYWN0b3JpZXM7Ci0KLSAgICAgICAgLy8gWy4uLl0KLQotICAgICAgICBmYWN0b3JpZXNbImFfbmFtZSJdID0gX19ib29zdF9fZmFjdG9yeV9fPGFfY29uY3JldGVfY2xhc3MqPigpOwotICAgICAgICBmYWN0b3JpZXNbImFub3RoZXJfbmFtZSJdID0gCi0gICAgICAgICAgICBfX2Jvb3N0X19mYWN0b3J5X188YW5vdGhlcl9jb25jcmV0ZV9jbGFzcyo+KCk7Ci0KLSAgICAgICAgLy8gWy4uLl0KLSAgICB9IAotCi1PZiBjb3Vyc2Ugd2UgY2FuIGp1c3QgYXMgZWFzeSBjcmVhdGUgZmFjdG9yaWVzIHRoYXQgdGFrZSBhcmd1bWVudHMgYW5kL29yCi1yZXR1cm4gX19zbWFydF9wb2ludGVyc19fLgotCi1bZW5kc2VjdF0KLQotCi1bc2VjdGlvbjpyZWZlcmVuY2UgUmVmZXJlbmNlXQotCi0KLVtzZWN0aW9uIHZhbHVlX2ZhY3RvcnldCi0KLVtoZWFkaW5nIERlc2NyaXB0aW9uXQotCi1GdW5jdGlvbiBvYmplY3QgdGVtcGxhdGUgdGhhdCBpbnZva2VzIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdHlwZSBgVGAuCi0KLVtoZWFkaW5nIEhlYWRlcl0KLSAgICAjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC92YWx1ZV9mYWN0b3J5LmhwcD4KLQotW2hlYWRpbmcgU3lub3BzaXNdCi0KLSAgICBuYW1lc3BhY2UgYm9vc3QKLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4KLSAgICAgICAgY2xhc3MgdmFsdWVfZmFjdG9yeTsKLSAgICB9Ci0KLVt2YXJpYWJsZWxpc3QgTm90YXRpb24KLSAgICBbW2BUYF0gICAgICAgICBbYW4gYXJiaXRyYXJ5IHR5cGUgd2l0aCBhdCBsZWFzdCBvbmUgcHVibGljIGNvbnN0cnVjdG9yXV0KLSAgICBbW2BhMGAuLi5gYU5gXSBbYXJndW1lbnQgTFZhbHVlcyB0byBhIGNvbnN0cnVjdG9yIG9mIGBUYF1dCi0gICAgW1tgRmBdICAgICAgICAgW3RoZSB0eXBlIGB2YWx1ZV9mYWN0b3J5PEY+YF1dCi0gICAgW1tgZmBdICAgICAgICAgW2FuIGluc3RhbmNlIG9iamVjdCBvZiBgRmBdXQotXQotCi1baGVhZGluZyBFeHByZXNzaW9uIFNlbWFudGljc10KLQotW3RhYmxlCi0gICAgW1tFeHByZXNzaW9uXSAgICAgICBbU2VtYW50aWNzXV0KLSAgICBbW2BGKClgXSAgICAgICAgICAgIFtjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIGBGYC5dXQotICAgIFtbYEYoZilgXSAgICAgICAgICAgW2NyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgYEZgLl1dCi0gICAgW1tgZihhMGAuLi5gYU4pYF0gICBbcmV0dXJucyBgVChhMGAuLi5gYU4pYC5dXQotICAgIFtbYEY6OnJlc3VsdF90eXBlYF0gW2lzIHRoZSB0eXBlIGBUYC5dXQotXQotCi1baGVhZGluZyBMaW1pdHNdCi0KLVRoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX1ZBTFVFX0ZBQ1RPUllfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldCB0aGUKLW1heGltdW0gYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDEwLgotCi1bZW5kc2VjdF0KLQotCi1bc2VjdGlvbiBmYWN0b3J5XQotCi1baGVhZGluZyBEZXNjcmlwdGlvbl0KLQotRnVuY3Rpb24gb2JqZWN0IHRlbXBsYXRlIHRoYXQgZHluYW1pY2FsbHkgY29uc3RydWN0cyBhIHBvaW50ZWUgb2JqZWN0IGZvcgotdGhlIHR5cGUgb2YgcG9pbnRlciBnaXZlbiBhcyB0ZW1wbGF0ZSBhcmd1bWVudC4gU21hcnQgcG9pbnRlcnMgbWF5IGJlIHVzZWQKLWZvciB0aGUgdGVtcGxhdGUgYXJndW1lbnQsIGdpdmVuIHRoYXQgYGJvb3N0Ojpwb2ludGVlPFBvaW50ZXI+Ojp0eXBlYCB5aWVsZHMKLXRoZSBwb2ludGVlIHR5cGUuCi0KLUlmIGFuIF9fYWxsb2NhdG9yX18gaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgCi1wbGFjZW1lbnQgZm9ybSBvZiB0aGUgYG5ld2Agb3BlcmF0b3IgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIG9iamVjdC4KLUEgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FsbHMgdGhlIGRlc3RydWN0b3IgYW5kIGRlYWxsb2NhdGVzIHRoZSBtZW1vcnkKLXdpdGggYSBjb3B5IG9mIHRoZSBBbGxvY2F0b3IgaXMgdXNlZCBmb3IgdGhlIHNlY29uZCBjb25zdHJ1Y3RvciBhcmd1bWVudAotb2YgYFBvaW50ZXJgICh0aHVzIGl0IG11c3QgYmUgYSBfX3NtYXJ0X3BvaW50ZXJfXyB0aGF0IHByb3ZpZGVzIGEgc3VpdGFibGUgCi1jb25zdHJ1Y3Rvciwgc3VjaCBhcyBfX2Jvb3N0X19zaGFyZWRfcHRyX18pLgotCi1JZiBhIHRoaXJkIHRlbXBsYXRlIGFyZ3VtZW50IGlzIGBmYWN0b3J5X3Bhc3Nlc19hbGxvY190b19zbWFydF9wb2ludGVyYCwKLXRoZSBhbGxvY2F0b3IgaXRzZWxmIGlzIHVzZWQgZm9yIHRoZSB0aGlyZCBjb25zdHJ1Y3RvciBhcmd1bWVudCBvZiBgUG9pbnRlcmAKLShfX2Jvb3N0X19zaGFyZWRfcHRyX18gdGhlbiB1c2VzIHRoZSBhbGxvY2F0b3IgdG8gbWFuYWdlIHRoZSBtZW1vcnkgb2YgaXRzCi1zZXBhcmF0ZWx5IGFsbG9jYXRlZCByZWZlcmVuY2UgY291bnRlcikuCi0KLVtoZWFkaW5nIEhlYWRlcl0KLSAgICAjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mYWN0b3J5LmhwcD4KLQotW2hlYWRpbmcgU3lub3BzaXNdCi0KLSAgICBuYW1lc3BhY2UgYm9vc3QKLSAgICB7Ci0gICAgICAgIGVudW0gZmFjdG9yeV9hbGxvY19wcm9wYWdhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBmYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyLAotICAgICAgICAgICAgZmFjdG9yeV9wYXNzZXNfYWxsb2NfdG9fc21hcnRfcG9pbnRlcgotICAgICAgICB9OwotCi0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQb2ludGVyLCAKLSAgICAgICAgICAgIGNsYXNzIEFsbG9jYXRvciA9IGJvb3N0Ojpub25lX3QsCi0gICAgICAgICAgICBmYWN0b3J5X2FsbG9jX3Byb3BhZ2F0aW9uIEFsbG9jUHJvcCA9Ci0gICAgICAgICAgICAgICAgZmFjdG9yeV9hbGxvY19mb3JfcG9pbnRlZV9hbmRfZGVsZXRlciA+Ci0gICAgICAgIGNsYXNzIGZhY3Rvcnk7Ci0gICAgfQotCi1bdmFyaWFibGVsaXN0IE5vdGF0aW9uCi0gICAgW1tgVGBdICAgICAgICAgW2FuIGFyYml0cmFyeSB0eXBlIHdpdGggYXQgbGVhc3Qgb25lIHB1YmxpYyBjb25zdHJ1Y3Rvcl1dCi0gICAgW1tgUGBdICAgICAgICAgW3BvaW50ZXIgb3Igc21hcnQgcG9pbnRlciB0byBgVGBdXQotICAgIFtbYGEwYC4uLmBhTmBdIFthcmd1bWVudCBMVmFsdWVzIHRvIGEgY29uc3RydWN0b3Igb2YgYFRgXV0KLSAgICBbW2BGYF0gICAgICAgICBbdGhlIHR5cGUgYGZhY3Rvcnk8UD5gXV0KLSAgICBbW2BmYF0gICAgICAgICBbYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIGBGYF1dCi1dCi0KLVtoZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQotCi1bdGFibGUKLSAgICBbW0V4cHJlc3Npb25dICAgICAgIFtTZW1hbnRpY3NdXQotICAgIFtbYEYoKWBdICAgICAgICAgICAgW2NyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgYEZgLl1dCi0gICAgW1tgRihmKWBdICAgICAgICAgICBbY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSBgRmAuXV0KLSAgICBbW2BmKGEwYC4uLmBhTilgXSAgIFtkeW5hbWljYWxseSBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIGBUYCB1c2luZyAKLSAgICAgICAgYGEwYC4uLmBhTmAgYXMgYXJndW1lbnRzIGZvciB0aGUgY29uc3RydWN0b3IgaW52b2NhdGlvbi5dXQotICAgIFtbYEY6OnJlc3VsdF90eXBlYF0gW2lzIHRoZSB0eXBlIGBQYCB3aXRoIHRvcC1sZXZlbCBjdi1xdWFsaWZpZXJzIHJlbW92ZWQuXV0KLV0KLQotW2hlYWRpbmcgTGltaXRzXQotCi1UaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9GQUNUT1JZX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQgdGhlCi1tYXhpbXVtIGFyaXR5LiBJdCBkZWZhdWx0cyB0byAxMC4KLQotW2VuZHNlY3RdCi0KLVtlbmRzZWN0XQotCi1bc2VjdGlvbiBBY2tub3dsZWRnZW1lbnRzXQotCi1FcmljIE5pZWJsZXIgcmVxdWVzdGVkIGEgZnVuY3Rpb24gdG8gaW52b2tlIGEgdHlwZSdzIGNvbnN0cnVjdG9yICh3aXRoIHRoZSAKLWFyZ3VtZW50cyBzdXBwbGllZCBhcyBhIFR1cGxlKSBhcyBhIEZ1c2lvbiBmZWF0dXJlLiBUaGVzZSBGYWN0b3J5IHV0aWxpdGllcyBhcmUKLWEgZmFjdG9yZWQtb3V0IGdlbmVyYWxpemF0aW9uIG9mIHRoaXMgaWRlYS4KLQotRGF2ZSBBYnJhaGFtcyBzdWdnZXN0ZWQgU21hcnQgUG9pbnRlciBzdXBwb3J0IGZvciBleGNlcHRpb24gc2FmZXR5LCBwcm92aWRpbmcKLXVzZWZ1bCBoaW50cyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLgotCi1Kb2VsIGRlIEd1em1hbidzIGRvY3VtZW50YXRpb24gc3R5bGUgd2FzIGNvcGllZCBmcm9tIEZ1c2lvbi4KLQotRnVydGhlciwgSSB3YW50IHRvIHRoYW5rIFBldGVyIERpbW92IGZvciBzaGFyaW5nIGhpcyBpbnNpZ2h0cyBvbiBsYW5ndWFnZQotZGV0YWlscyBhbmQgdGhlaXIgZXZvbHV0aW9uLgotCi1bZW5kc2VjdF0KLQotW3NlY3Rpb24gUmVmZXJlbmNlc10KLQotIyBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVzaWduX1BhdHRlcm5zIERlc2lnbiBQYXR0ZXJuc10sCi0gIEdhbW1hIGV0IGFsLiAtIEFkZGlzb24gV2VzbGV5IFB1Ymxpc2hpbmcsIDE5OTUKLQotIyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC8gU3RhbmRhcmQgVGVtcGxhdGUgTGlicmFyeSBQcm9ncmFtbWVyJ3MgR3VpZGVdLCAKLSAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnksIDE5OTQKLQotIyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvYmluZC9iaW5kLmh0bWwgQm9vc3QuQmluZF0sIAotICBQZXRlciBEaW1vdiwgMjAwMS0yMDA1Ci0KLSMgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIEJvb3N0LkZ1bmN0aW9uXSwKLSAgRG91Z2xhcyBHcmVnb3IsIDIwMDEtMjAwNAotCi1bZW5kc2VjdF0KLQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzMTYyOS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjIwICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Ci08dGl0bGU+Q2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9GYWN0b3J5IDEuMDwvdGl0bGU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OC4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRmFjdG9yeSAxLjAiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjwvZGl2PgotPGRpdiBjbGFzcz0iY2hhcHRlciI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+Ci08ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5Ij48L2E+Q2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9GYWN0b3J5IDEuMDwvaDI+PC9kaXY+Ci08ZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPgotPHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+VG9iaWFzPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+U2Nod2luZ2VyPC9zcGFuPgotPC9oMz48L2Rpdj48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0ICYjMTY5OyAyMDA3LCAyMDA4IFRvYmlhcyBTY2h3aW5nZXI8L3A+PC9kaXY+Ci08ZGl2PjxkaXYgY2xhc3M9ImxlZ2Fsbm90aWNlIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5sZWdhbCI+PC9hPjxwPgotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCi0gICAgICA8L3A+Ci08L2Rpdj48L2Rpdj4KLTwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj4KLTxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KLTxkbCBjbGFzcz0idG9jIj4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYnJpZWZfZGVzY3JpcHRpb24iPkJyaWVmIERlc2NyaXB0aW9uPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5iYWNrZ3JvdW5kIj5CYWNrZ3JvdW5kPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UiPlJlZmVyZW5jZTwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYWNrbm93bGVkZ2VtZW50cyI+QWNrbm93bGVkZ2VtZW50czwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlcyI+UmVmZXJlbmNlczwvYT48L3NwYW4+PC9kdD4KLTwvZGw+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5icmllZl9kZXNjcmlwdGlvbiI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5icmllZl9kZXNjcmlwdGlvbiIgdGl0bGU9IkJyaWVmIERlc2NyaXB0aW9uIj5CcmllZiBEZXNjcmlwdGlvbjwvYT4KLTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD4KLSAgICAgIFRoZSB0ZW1wbGF0ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PC9jb2RlPiBsZXRzIHlvdSBlbmNhcHN1bGF0ZSBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj48L2NvZGU+IGV4cHJlc3Npb24gYXMgYSBmdW5jdGlvbiBvYmplY3QsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48L2NvZGU+Ci0gICAgICBlbmNhcHN1bGF0ZXMgYSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIHdpdGhvdXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPjwvY29kZT4uCi0gICAgPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48L2NvZGU+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiomZ3Q7KCkoPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmczPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHNhbWUgYXMgbmV3IFQoYXJnMSxhcmcyLGFyZzMpPC9zcGFuPgotCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PC9jb2RlPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7KCkoPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmczPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHNhbWUgYXMgVChhcmcxLGFyZzIsYXJnMyk8L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgRm9yIHRlY2huaWNhbCByZWFzb25zIHRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdHMgaGF2ZSB0byBiZSBMVmFsdWVzLgotICAgICAgQSBmYWN0b3J5IHRoYXQgYWxzbyBhY2NlcHRzIFJWYWx1ZXMgY2FuIGJlIGNvbXBvc2VkIHVzaW5nIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48L2NvZGU+PC9hPgotICAgICAgb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJpbmQ8L3NwYW4+PC9jb2RlPjwvYT4uCi0gICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYmFja2dyb3VuZCI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5iYWNrZ3JvdW5kIiB0aXRsZT0iQmFja2dyb3VuZCI+QmFja2dyb3VuZDwvYT4KLTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD4KLSAgICAgIEluIHRyYWRpdGlvbmFsIE9iamVjdCBPcmllbnRlZCBQcm9ncmFtbWluZyBhIEZhY3RvcnkgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZwotICAgICAgYW4gaW50ZXJmYWNlIG9mIG9uZSBvciBtb3JlIG1ldGhvZHMgdGhhdCBjb25zdHJ1Y3Qgb2JqZWN0cyBjb25mb3JtaW5nIHRvIGtub3duCi0gICAgICBpbnRlcmZhY2VzLgotICAgIDwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gYXNzdW1pbmcgYV9jb25jcmV0ZV9jbGFzcyBhbmQgYW5vdGhlcl9jb25jcmV0ZV9jbGFzcyBhcmUgZGVyaXZlZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmcm9tIGFuX2Fic3RyYWN0X2NsYXNzPC9zcGFuPgotCi08c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnB1YmxpYzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dmlydHVhbDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFuX2Fic3RyYWN0X2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y3JlYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dmlydHVhbDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj59Ozwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9jb25jcmV0ZV9mYWN0b3J5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnB1YmxpYzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cHVibGljPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52aXJ0dWFsPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5fYWJzdHJhY3RfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPio8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jcmVhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2NvbmNyZXRlX2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFub3RoZXJfY29uY3JldGVfZmFjdG9yeTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPjo8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5wdWJsaWM8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnB1YmxpYzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dmlydHVhbDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFuX2Fic3RyYWN0X2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y3JlYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5vdGhlcl9jb25jcmV0ZV9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPn07PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWluPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcHRyX2NvbnRhaW5lci9kb2MvcHRyX21hcC5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cHRyX21hcDwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9zdHJpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PC9jb2RlPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aW5zZXJ0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhX25hbWUiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hdXRvX3B0cjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7KDwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfY29uY3JldGVfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSk7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmluc2VydDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYW5vdGhlcl9uYW1lIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXV0b19wdHI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Oyg8L3NwYW4+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbm90aGVyX2NvbmNyZXRlX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikpOzwvc3Bhbj4KLQotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KLQotICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hdXRvX3B0cjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5fYWJzdHJhY3RfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmF0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zb21lX25hbWU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikuPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jcmVhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpKTs8L3NwYW4+Ci0KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBUaGlzIGFwcHJvYWNoIGhhcyBzZXZlcmFsIGRyYXdiYWNrcy4gVGhlIG1vc3Qgb2J2aW91cyBvbmUgaXMgdGhhdCB0aGVyZSBpcwotICAgICAgbG90cyBvZiBib2lsZXJwbGF0ZSBjb2RlLiBJbiBvdGhlciB3b3JkcyB0aGVyZSBpcyB0b28gbXVjaCBjb2RlIHRvIGV4cHJlc3MKLSAgICAgIGEgcmF0aGVyIHNpbXBsZSBpbnRlbnRpb24uIFdlIGNvdWxkIHVzZSB0ZW1wbGF0ZXMgdG8gZ2V0IHJpZCBvZiBzb21lIG9mIGl0Ci0gICAgICBidXQgdGhlIGFwcHJvYWNoIHJlbWFpbnMgaW5mbGV4aWJsZToKLSAgICA8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgV2UgbWF5IHdhbnQgYSBmYWN0b3J5IHRoYXQgdGFrZXMgc29tZSBhcmd1bWVudHMgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZQotICAgICAgICAgIGNvbnN0cnVjdG9yLAotICAgICAgICA8L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgd2Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIHVzZSBzbWFydCBwb2ludGVycywKLSAgICAgICAgPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotICAgICAgICAgIHdlIG1heSB3YW50IHNldmVyYWwgbWVtYmVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgZGlmZmVyZW50IGtpbmRzIG9mIG9iamVjdHMsCi0gICAgICAgIDwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLSAgICAgICAgICB3ZSBtaWdodCBub3QgbmVjZXNzYXJpbHkgbmVlZCBhIHBvbHltb3JwaGljIGJhc2UgY2xhc3MgZm9yIHRoZSBvYmplY3RzLAotICAgICAgICA8L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgYXMgd2Ugd2lsbCBzZWUsIHdlIGRvIG5vdCBuZWVkIGEgZmFjdG9yeSBiYXNlIGNsYXNzIGF0IGFsbCwKLSAgICAgICAgPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotICAgICAgICAgIHdlIG1pZ2h0IHdhbnQgdG8ganVzdCBjYWxsIHRoZSBjb25zdHJ1Y3RvciAtIHdpdGhvdXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPjwvY29kZT4KLSAgICAgICAgICB0byBjcmVhdGUgYW4gb2JqZWN0IG9uIHRoZSBzdGFjaywgYW5kCi0gICAgICAgIDwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLSAgICAgICAgICBmaW5hbGx5IHdlIG1pZ2h0IHdhbnQgdG8gdXNlIGN1c3RvbWl6ZWQgbWVtb3J5IG1hbmFnZW1lbnQuCi0gICAgICAgIDwvbGk+Ci08L3VsPjwvZGl2PgotPHA+Ci0gICAgICBFeHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHVzaW5nIGZ1bmN0aW9uIG9iamVjdHMgYW5kIGdlbmVyaWMgQm9vc3QgY29tcG9uZW50cwotICAgICAgZm9yIHRoZWlyIGNvbXBvc2l0aW9uLCBEZXNpZ24gUGF0dGVybnMgdGhhdCBkZXNjcmliZSBjYWxsYmFjayBtZWNoYW5pc21zICh0eXBpY2FsbHkKLSAgICAgIHJlcXVpcmluZyBhIGhpZ2ggcGVyY2VudGFnZSBvZiBib2lsZXJwbGF0ZSBjb2RlIHdpdGggcHVyZSBPYmplY3QgT3JpZW50ZWQgbWV0aG9kb2xvZ3kpCi0gICAgICBiZWNvbWUgaW1wbGVtZW50YWJsZSB3aXRoIGp1c3QgZmV3IGNvZGUgbGluZXMgYW5kIHdpdGhvdXQgZXh0cmEgY2xhc3Nlcy4KLSAgICA8L3A+Ci08cD4KLSAgICAgIEZhY3RvcmllcyBhcmUgY2FsbGJhY2sgbWVjaGFuaXNtcyBmb3IgY29uc3RydWN0b3JzLCBzbyB3ZSBwcm92aWRlIHR3byBjbGFzcwotICAgICAgdGVtcGxhdGVzLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjwvY29kZT4sCi0gICAgICB0aGF0IGVuY2Fwc3VsYXRlIG9iamVjdCBjb25zdHJ1Y3Rpb24gdmlhIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiB0aGUgY29uc3RydWN0b3IKLSAgICAgIGFuZCB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPjwvY29kZT4gb3BlcmF0b3IsIHJlc3BlY3RpdmVseS4KLSAgICA8L3A+Ci08cD4KLSAgICAgIFdlIGxldCB0aGUgZnVuY3Rpb24gb2JqZWN0cyBmb3J3YXJkIHRoZWlyIGFyZ3VtZW50cyB0byB0aGUgY29uc3RydWN0aW9uIGV4cHJlc3Npb25zCi0gICAgICB0aGV5IGVuY2Fwc3VsYXRlLiBPdmVyIHRoaXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjwvY29kZT4KLSAgICAgIG9wdGlvbmFsbHkgYWxsb3dzIHRoZSB1c2Ugb2Ygc21hcnQgcG9pbnRlcnMgYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5BbGxvY2F0b3JzPC9hPi4KLSAgICA8L3A+Ci08cD4KLSAgICAgIENvbXBpbGUtdGltZSBwb2x5bW9ycGhpc20gY2FuIGJlIHVzZWQgd2hlcmUgYXBwcm9wcmlhdGUsCi0gICAgPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmRvX3NvbWV0aGluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZvciBjb25jZXB0dWFsbHkgc2ltaWxhciBvYmplY3RzIHggd2UgbmVpdGhlciBuZWVkIHZpcnR1YWw8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZ1bmN0aW9ucyBub3IgYSBjb21tb24gYmFzZSBjbGFzcyBpbiB0aGlzIGNvbnRleHQuPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgotPC9wcmU+Ci08cD4KLSAgICAgIE5vdywgdG8gYWxsb3cgaW5ob21vZ2VuZW91cyBzaWduYXR1cmVzIGZvciB0aGUgY29uc3RydWN0b3JzIG9mIHRoZSB0eXBlcyBwYXNzZWQKLSAgICAgIGluIGZvciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4gd2UgY2FuIHVzZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjwvY29kZT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvYmluZC9iaW5kLmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5iaW5kPC9zcGFuPjwvY29kZT48L2E+Ci0gICAgICB0byBub3JtYWxpemUgYmV0d2VlbiB0aGVtLgotICAgIDwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlZhbHVlRmFjdG9yeTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmRvX3NvbWV0aGluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VmFsdWVGYWN0b3J5PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vYmo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VmFsdWVGYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKSk8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VmFsdWVGYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1ha2Vfb2JqPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5iPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KLQotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmb3IgY29uY2VwdHVhbGx5IHNpbWlsYXIgb2JqZWN0cyB4IHdlIG5laXRoZXIgbmVlZCB2aXJ0dWFsPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmdW5jdGlvbnMgbm9yIGEgY29tbW9uIGJhc2UgY2xhc3MgaW4gdGhpcyBjb250ZXh0Ljwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1haW48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmRvX3NvbWV0aGluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PC9jb2RlPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5YPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7KCkpOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZG9fc29tZXRoaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJpbmQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjwvY29kZT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+WTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0OygpLDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+XzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+XzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikpOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gY29uc3RydWN0IFgoYSxiKSBhbmQgWShhLDUsYiksIHJlc3BlY3RpdmVseS48L3NwYW4+Ci0KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBNYXliZSB3ZSB3YW50IG91ciBvYmplY3RzIHRvIG91dGxpdmUgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUsIGluIHRoaXMgY2FzZSB3ZQotICAgICAgaGF2ZSB0byB1c2UgZHluYW1pYyBhbGxvY2F0aW9uOwotICAgIDwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZhY3Rvcnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPndoYXRldmVyPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZG9fc29tZXRoaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GYWN0b3J5PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bmV3X29iajwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKSk8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wdHI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bmV3X29iajwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Yjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci0KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gYWdhaW4sIG5vIGNvbW1vbiBiYXNlIGNsYXNzIG9yIHZpcnR1YWwgZnVuY3Rpb25zIG5lZWRlZCw8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHdlIGNvdWxkIGVuZm9yY2UgYSBwb2x5bW9ycGhpYyBiYXNlIGJ5IHdyaXRpbmcgZS5nLjwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gICAgYm9vc3Q6OnNoYXJlZF9wdHImbHQ7YmFzZSZndDs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGluc3RlYWQgb2Y8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vICAgIHR5cGVuYW1lIEZhY3Rvcnk6OnJlc3VsdF90eXBlPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBhYm92ZS48L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIE5vdGUgdGhhdCB3ZSBhcmUgYWxzbyBmcmVlIHRvIGhhdmUgdGhlIHR5cGUgZXJhc3VyZSBoYXBwZW4gPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBzb21ld2hlcmUgZWxzZSAoZS5nLiBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhpcyBmdW5jdGlvbidzPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyByZXN1bHQgdHlwZSkuPC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uIGNhbGwgZG9fc29tZXRoaW5nIGxpa2UgYWJvdmUgYnV0IHdpdGggX19mYWN0b3J5X18gaW5zdGVhZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBvZiBfX3ZhbHVlX2ZhY3RvcnlfX108L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgQWx0aG91Z2ggd2UgbWlnaHQgaGF2ZSBjcmVhdGVkIHBvbHltb3JwaGljIG9iamVjdHMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsCi0gICAgICB3ZSBoYXZlIHVzZWQgY29tcGlsZSB0aW1lIHBvbHltb3JwaGlzbSBmb3IgdGhlIGZhY3RvcnkuIElmIHdlIHdhbnQgdG8gZXJhc2UKLSAgICAgIHRoZSB0eXBlIG9mIHRoZSBmYWN0b3J5IGFuZCB0aHVzIGFsbG93IHBvbHltb3JwaGlzbSBhdCBydW4gdGltZSwgd2UgY2FuIHVzZQotICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvZnVuY3Rpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5GdW5jdGlvbjwvYT4KLSAgICAgIHRvIGRvIHNvLiBUaGUgZmlyc3QgZXhhbXBsZSBjYW4gYmUgcmV3cml0dGVuIGFzIGZvbGxvd3MuCi0gICAgPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFuX2Fic3RyYWN0X2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qKCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWluPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9tYXAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYXA8L3NwYW4+PC9jb2RlPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvc3RyaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLQotICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KLQotICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPls8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFfbmFtZSI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl08L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PC9jb2RlPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2NvbmNyZXRlX2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qJmd0OygpOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhbm90aGVyX25hbWUiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5dPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4KLSAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjwvY29kZT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5vdGhlcl9jb25jcmV0ZV9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KiZndDsoKTs8L3NwYW4+Ci0KLSAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBPZiBjb3Vyc2Ugd2UgY2FuIGp1c3QgYXMgZWFzeSBjcmVhdGUgZmFjdG9yaWVzIHRoYXQgdGFrZSBhcmd1bWVudHMgYW5kL29yIHJldHVybgotICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zbWFydF9wdHIvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj5TbWFydCBQb2ludGVyczwvYT4uCi0gICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZSIgdGl0bGU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeSI+dmFsdWVfZmFjdG9yeTwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkiPmZhY3Rvcnk8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeSI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeSIgdGl0bGU9InZhbHVlX2ZhY3RvcnkiPnZhbHVlX2ZhY3Rvcnk8L2E+Ci08L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmgwIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5kZXNjcmlwdGlvbiI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuZGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uPC9hPgotICAgICAgPC9oNT4KLTxwPgotICAgICAgICBGdW5jdGlvbiBvYmplY3QgdGVtcGxhdGUgdGhhdCBpbnZva2VzIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4uCi0gICAgICA8L3A+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaDEiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmhlYWRlciI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaGVhZGVyIj5IZWFkZXI8L2E+Ci0gICAgICA8L2g1PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJwcmVwcm9jZXNzb3IiPiNpbmNsdWRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmhwcDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KLTwvcHJlPgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmgyIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5zeW5vcHNpcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3Rvcnkuc3lub3BzaXMiPlN5bm9wc2lzPC9hPgotICAgICAgPC9oNT4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLTwvcHJlPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+Tm90YXRpb248L2I+PC9wPgotPGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYW4gYXJiaXRyYXJ5IHR5cGUgd2l0aCBhdCBsZWFzdCBvbmUgcHVibGljIGNvbnN0cnVjdG9yCi0gICAgICAgICAgICA8L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYXJndW1lbnQgTFZhbHVlcyB0byBhIGNvbnN0cnVjdG9yIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPgotICAgICAgICAgICAgICB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgIDwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08L2RsPgotPC9kaXY+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaDMiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmV4cHJlc3Npb25fc2VtYW50aWNzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5leHByZXNzaW9uX3NlbWFudGljcyI+RXhwcmVzc2lvbgotICAgICAgICBTZW1hbnRpY3M8L2E+Ci0gICAgICA8L2g1PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJ0YWJsZSI+Ci08Y29sZ3JvdXA+Ci08Y29sPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGhlYWQ+PHRyPgotPHRoPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90aD4KLTx0aD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIFNlbWFudGljcwotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90aD4KLTwvdHI+PC90aGVhZD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPi4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4uCi0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgcmV0dXJucyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPi4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBpcyB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4uCi0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5Lmg0Ij48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5saW1pdHMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmxpbWl0cyI+TGltaXRzPC9hPgotICAgICAgPC9oNT4KLTxwPgotICAgICAgICBUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9WQUxVRV9GQUNUT1JZX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQKLSAgICAgICAgdGhlIG1heGltdW0gYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDEwLgotICAgICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5Ij48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5IiB0aXRsZT0iZmFjdG9yeSI+ZmFjdG9yeTwvYT4KLTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaDAiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmRlc2NyaXB0aW9uIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5kZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+Ci0gICAgICA8L2g1PgotPHA+Ci0gICAgICAgIEZ1bmN0aW9uIG9iamVjdCB0ZW1wbGF0ZSB0aGF0IGR5bmFtaWNhbGx5IGNvbnN0cnVjdHMgYSBwb2ludGVlIG9iamVjdCBmb3IKLSAgICAgICAgdGhlIHR5cGUgb2YgcG9pbnRlciBnaXZlbiBhcyB0ZW1wbGF0ZSBhcmd1bWVudC4gU21hcnQgcG9pbnRlcnMgbWF5IGJlIHVzZWQKLSAgICAgICAgZm9yIHRoZSB0ZW1wbGF0ZSBhcmd1bWVudCwgZ2l2ZW4gdGhhdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBvaW50ZWU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlBvaW50ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs6Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dHlwZTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgIHlpZWxkcyB0aGUgcG9pbnRlZSB0eXBlLgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIElmIGFuIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5BbGxvY2F0b3I8L2E+Ci0gICAgICAgIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgdGhlIHBsYWNlbWVudCBmb3JtIG9mIHRoZQotICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+PC9jb2RlPiBvcGVyYXRvciBpcyB1c2VkIHRvIGNvbnN0cnVjdAotICAgICAgICB0aGUgb2JqZWN0LiBBIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbGxzIHRoZSBkZXN0cnVjdG9yIGFuZCBkZWFsbG9jYXRlcyB0aGUKLSAgICAgICAgbWVtb3J5IHdpdGggYSBjb3B5IG9mIHRoZSBBbGxvY2F0b3IgaXMgdXNlZCBmb3IgdGhlIHNlY29uZCBjb25zdHJ1Y3RvciBhcmd1bWVudAotICAgICAgICBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5Qb2ludGVyPC9zcGFuPjwvY29kZT4gKHRodXMgaXQgbXVzdAotICAgICAgICBiZSBhIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL2luZGV4Lmh0bWwiIHRhcmdldD0iX3RvcCI+U21hcnQgUG9pbnRlcjwvYT4KLSAgICAgICAgdGhhdCBwcm92aWRlcyBhIHN1aXRhYmxlIGNvbnN0cnVjdG9yLCBzdWNoIGFzIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL3NoYXJlZF9wdHIuaHRtIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c2hhcmVkX3B0cjwvc3Bhbj48L2NvZGU+PC9hPikuCi0gICAgICA8L3A+Ci08cD4KLSAgICAgICAgSWYgYSB0aGlyZCB0ZW1wbGF0ZSBhcmd1bWVudCBpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5X3Bhc3Nlc19hbGxvY190b19zbWFydF9wb2ludGVyPC9zcGFuPjwvY29kZT4sCi0gICAgICAgIHRoZSBhbGxvY2F0b3IgaXRzZWxmIGlzIHVzZWQgZm9yIHRoZSB0aGlyZCBjb25zdHJ1Y3RvciBhcmd1bWVudCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5Qb2ludGVyPC9zcGFuPjwvY29kZT4gKDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL3NoYXJlZF9wdHIuaHRtIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c2hhcmVkX3B0cjwvc3Bhbj48L2NvZGU+PC9hPiB0aGVuIHVzZXMgdGhlIGFsbG9jYXRvcgotICAgICAgICB0byBtYW5hZ2UgdGhlIG1lbW9yeSBvZiBpdHMgc2VwYXJhdGVseSBhbGxvY2F0ZWQgcmVmZXJlbmNlIGNvdW50ZXIpLgotICAgICAgPC9wPgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmgxIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oZWFkZXIiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmhlYWRlciI+SGVhZGVyPC9hPgotICAgICAgPC9oNT4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icHJlcHJvY2Vzc29yIj4jaW5jbHVkZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ocHA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci08L3ByZT4KLTxoNT4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oMiI+PC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3Rvcnkuc3lub3BzaXMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LnN5bm9wc2lzIj5TeW5vcHNpczwvYT4KLSAgICAgIDwvaDU+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5X2FsbG9jX3Byb3BhZ2F0aW9uPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeV9hbGxvY19mb3JfcG9pbnRlZV9hbmRfZGVsZXRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3RvcnlfcGFzc2VzX2FsbG9jX3RvX3NtYXJ0X3BvaW50ZXI8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPn07PC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5Qb2ludGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5BbGxvY2F0b3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ub25lX3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5X2FsbG9jX3Byb3BhZ2F0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+QWxsb2NQcm9wPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08L3ByZT4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08cCBjbGFzcz0idGl0bGUiPjxiPk5vdGF0aW9uPC9iPjwvcD4KLTxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Ci0gICAgICAgICAgICAgIGFuIGFyYml0cmFyeSB0eXBlIHdpdGggYXQgbGVhc3Qgb25lIHB1YmxpYyBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlA8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPgotICAgICAgICAgICAgICBwb2ludGVyIG9yIHNtYXJ0IHBvaW50ZXIgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICA8L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYXJndW1lbnQgTFZhbHVlcyB0byBhIGNvbnN0cnVjdG9yIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPgotICAgICAgICAgICAgICB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5QPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgIDwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08L2RsPgotPC9kaXY+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaDMiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmV4cHJlc3Npb25fc2VtYW50aWNzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5leHByZXNzaW9uX3NlbWFudGljcyI+RXhwcmVzc2lvbgotICAgICAgICBTZW1hbnRpY3M8L2E+Ci0gICAgICA8L2g1PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJ0YWJsZSI+Ci08Y29sZ3JvdXA+Ci08Y29sPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGhlYWQ+PHRyPgotPHRoPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90aD4KLTx0aD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIFNlbWFudGljcwotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90aD4KLTwvdHI+PC90aGVhZD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPi4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4uCi0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgZHluYW1pY2FsbHkgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgICAgICAgIHVzaW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+IGFzIGFyZ3VtZW50cyBmb3IgdGhlIGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIGlzIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlA8L3NwYW4+PC9jb2RlPiB3aXRoCi0gICAgICAgICAgICAgICAgICB0b3AtbGV2ZWwgY3YtcXVhbGlmaWVycyByZW1vdmVkLgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxoNT4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oNCI+PC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkubGltaXRzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5saW1pdHMiPkxpbWl0czwvYT4KLSAgICAgIDwvaDU+Ci08cD4KLSAgICAgICAgVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfRkFDVE9SWV9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQgdG8gc2V0IHRoZSBtYXhpbXVtCi0gICAgICAgIGFyaXR5LiBJdCBkZWZhdWx0cyB0byAxMC4KLSAgICAgIDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYWNrbm93bGVkZ2VtZW50cyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5hY2tub3dsZWRnZW1lbnRzIiB0aXRsZT0iQWNrbm93bGVkZ2VtZW50cyI+QWNrbm93bGVkZ2VtZW50czwvYT4KLTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD4KLSAgICAgIEVyaWMgTmllYmxlciByZXF1ZXN0ZWQgYSBmdW5jdGlvbiB0byBpbnZva2UgYSB0eXBlJ3MgY29uc3RydWN0b3IgKHdpdGggdGhlCi0gICAgICBhcmd1bWVudHMgc3VwcGxpZWQgYXMgYSBUdXBsZSkgYXMgYSBGdXNpb24gZmVhdHVyZS4gVGhlc2UgRmFjdG9yeSB1dGlsaXRpZXMKLSAgICAgIGFyZSBhIGZhY3RvcmVkLW91dCBnZW5lcmFsaXphdGlvbiBvZiB0aGlzIGlkZWEuCi0gICAgPC9wPgotPHA+Ci0gICAgICBEYXZlIEFicmFoYW1zIHN1Z2dlc3RlZCBTbWFydCBQb2ludGVyIHN1cHBvcnQgZm9yIGV4Y2VwdGlvbiBzYWZldHksIHByb3ZpZGluZwotICAgICAgdXNlZnVsIGhpbnRzIGZvciB0aGUgaW1wbGVtZW50YXRpb24uCi0gICAgPC9wPgotPHA+Ci0gICAgICBKb2VsIGRlIEd1em1hbidzIGRvY3VtZW50YXRpb24gc3R5bGUgd2FzIGNvcGllZCBmcm9tIEZ1c2lvbi4KLSAgICA8L3A+Ci08cD4KLSAgICAgIEZ1cnRoZXIsIEkgd2FudCB0byB0aGFuayBQZXRlciBEaW1vdiBmb3Igc2hhcmluZyBoaXMgaW5zaWdodHMgb24gbGFuZ3VhZ2UgZGV0YWlscwotICAgICAgYW5kIHRoZWlyIGV2b2x1dGlvbi4KLSAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2VzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZXMiIHRpdGxlPSJSZWZlcmVuY2VzIj5SZWZlcmVuY2VzPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVzaWduX1BhdHRlcm5zIiB0YXJnZXQ9Il90b3AiPkRlc2lnbiBQYXR0ZXJuczwvYT4sCi0gICAgICAgICAgR2FtbWEgZXQgYWwuIC0gQWRkaXNvbiBXZXNsZXkgUHVibGlzaGluZywgMTk5NQotICAgICAgICA8L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsLyIgdGFyZ2V0PSJfdG9wIj5TdGFuZGFyZCBUZW1wbGF0ZSBMaWJyYXJ5IFByb2dyYW1tZXIncwotICAgICAgICAgIEd1aWRlPC9hPiwgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnksIDE5OTQKLSAgICAgICAgPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvYmluZC9iaW5kLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuQmluZDwvYT4sCi0gICAgICAgICAgUGV0ZXIgRGltb3YsIDIwMDEtMjAwNQotICAgICAgICA8L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvZnVuY3Rpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5GdW5jdGlvbjwvYT4sCi0gICAgICAgICAgRG91Z2xhcyBHcmVnb3IsIDIwMDEtMjAwNAotICAgICAgICA8L2xpPgotPC9vbD48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxwPjxzbWFsbD5MYXN0IHJldmlzZWQ6IE5vdmVtYmVyIDAxLCAyMDA4IGF0IDIxOjQ0OjUyIEdNVDwvc21hbGw+PC9wPjwvdGQ+Ci08dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj48L2Rpdj48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYWY3MTYuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvaW5kZXguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDMwMjkuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci0gIDxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD1kb2MvaHRtbC9pbmRleC5odG1sIj4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gZmFpbGVkLCBjbGljayB0aGlzIAotICAgIDxhIGhyZWY9ImRvYy9odG1sL2luZGV4Lmh0bWwiPmxpbms8L2E+ICZuYnNwOzxocj4KLSAgICA8cD6pIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyLCAyMDA5PC9wPgotICAgIDxwPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSAKLSAgICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPgotICAgIExJQ0VOU0VfMV8wLnR4dDwvYT4gb3IgY29weSBhdAotICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvcD4KLSAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9KYW1maWxlIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzRmNmViLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLQotIyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKLSMKLSMgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotIyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi9cL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLQotaW1wb3J0IHRlc3RpbmcgOwotCi1wcm9qZWN0IGZhY3RvcnktdGVzdHMKLSAgICA7Ci0KLXRlc3Qtc3VpdGUgZnVuY3Rpb25hbC9mYWN0b3J5Ci0gICAgOgotICAgICAgWyBydW4gdmFsdWVfZmFjdG9yeS5jcHAgXQotICAgICAgWyBydW4gZmFjdG9yeS5jcHAgXQotICAgICAgWyBydW4gZmFjdG9yeV93aXRoX2FsbG9jYXRvci5jcHAgXQotICAgIDsKLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9mYWN0b3J5LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvZmFjdG9yeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNDdmMjguLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9mYWN0b3J5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBDb3B5cmlnaHQgKGMpIDIwMDcgVG9iaWFzIFNjaHdpbmdlcgotICAKLSAgICBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotICAgIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZhY3RvcnkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotY2xhc3Mgc3VtIAotewotICAgIGludCB2YWxfc3VtOwotICBwdWJsaWM6Ci0gICAgc3VtKGludCBhLCBpbnQgYikgOiB2YWxfc3VtKGEgKyBiKSB7IH0KLQotICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnZhbF9zdW07IH0KLX07Ci0KLWludCBtYWluKCkKLXsKLSAgICBpbnQgb25lID0gMSwgdHdvID0gMjsKLSAgICB7Ci0gICAgICBzdW0qIGluc3RhbmNlKCBuZG5ib29zdDo6ZmFjdG9yeTwgc3VtKiA+KCkob25lLHR3bykgKTsKLSAgICAgIEJPT1NUX1RFU1QoKmluc3RhbmNlID09IDMpOwotICAgIH0KLSAgICB7Ci0gICAgICBzdGQ6OmF1dG9fcHRyPHN1bT4gaW5zdGFuY2UoIG5kbmJvb3N0OjpmYWN0b3J5PCBzdGQ6OmF1dG9fcHRyPHN1bT4gPigpKG9uZSx0d28pICk7Ci0gICAgICBCT09TVF9URVNUKCppbnN0YW5jZSA9PSAzKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvZmFjdG9yeV93aXRoX2FsbG9jYXRvci5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3Rvcnlfd2l0aF9hbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmM2Yzk5Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvZmFjdG9yeV93aXRoX2FsbG9jYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKLSAgCi0gICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKLSAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mYWN0b3J5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxib29zdC9zaGFyZWRfcHRyLmhwcD4KLQotdXNpbmcgc3RkOjpzaXplX3Q7Ci0KLWNsYXNzIHN1bSAKLXsKLSAgICBpbnQgdmFsX3N1bTsKLSAgcHVibGljOgotICAgIHN1bShpbnQgYSwgaW50IGIpIDogdmFsX3N1bShhICsgYikgeyB9Ci0KLSAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0aGlzLT52YWxfc3VtOyB9Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+Ci1jbGFzcyBjb3VudGluZ19hbGxvY2F0b3IgOiBwdWJsaWMgc3RkOjphbGxvY2F0b3I8VD4KLXsKLSAgcHVibGljOgotICAgIGNvdW50aW5nX2FsbG9jYXRvcigpCi0gICAgeyB9Ci0KLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgT3RoZXJUID4KLSAgICBzdHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBjb3VudGluZ19hbGxvY2F0b3I8T3RoZXJUPiBvdGhlcjsgfTsKLQotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBPdGhlclQgPgotICAgIGNvdW50aW5nX2FsbG9jYXRvcihjb3VudGluZ19hbGxvY2F0b3I8T3RoZXJUPiBjb25zdCYgdGhhdCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBzaXplX3Qgbl9hbGxvY2F0ZWQ7Ci0gICAgVCogYWxsb2NhdGUoc2l6ZV90IG4sIHZvaWQgY29uc3QqIGhpbnQgPSAwbCkKLSAgICB7Ci0gICAgICAgIG5fYWxsb2NhdGVkICs9IDE7Ci0gICAgICAgIHJldHVybiBzdGQ6OmFsbG9jYXRvcjxUPjo6YWxsb2NhdGUobixoaW50KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IG5fZGVhbGxvY2F0ZWQ7Ci0gICAgdm9pZCBkZWFsbG9jYXRlKFQqIHB0ciwgc2l6ZV90IG4pCi0gICAgewotICAgICAgICBuX2RlYWxsb2NhdGVkICs9IDE7Ci0gICAgICAgIHJldHVybiBzdGQ6OmFsbG9jYXRvcjxUPjo6ZGVhbGxvY2F0ZShwdHIsbik7Ci0gICAgfQotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc2l6ZV90IGNvdW50aW5nX2FsbG9jYXRvcjxUPjo6bl9hbGxvY2F0ZWQgPSAwOwotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzaXplX3QgY291bnRpbmdfYWxsb2NhdG9yPFQ+OjpuX2RlYWxsb2NhdGVkID0gMDsKLQotaW50IG1haW4oKQotewotICAgIGludCBvbmUgPSAxLCB0d28gPSAyOwotICAgIHsKLSAgICAgIG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4gaW5zdGFuY2UoCi0gICAgICAgICAgbmRuYm9vc3Q6OmZhY3Rvcnk8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4sIGNvdW50aW5nX2FsbG9jYXRvcjx2b2lkPiwgCi0gICAgICAgICAgICAgIG5kbmJvb3N0OjpmYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyID4oKShvbmUsdHdvKSApOwotICAgICAgQk9PU1RfVEVTVCgqaW5zdGFuY2UgPT0gMyk7Ci0gICAgfQotICAgIEJPT1NUX1RFU1QoY291bnRpbmdfYWxsb2NhdG9yPHN1bT46Om5fYWxsb2NhdGVkID09IDEpOyAKLSAgICBCT09TVF9URVNUKGNvdW50aW5nX2FsbG9jYXRvcjxzdW0+OjpuX2RlYWxsb2NhdGVkID09IDEpOwotICAgIHsKLSAgICAgIG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4gaW5zdGFuY2UoCi0gICAgICAgICAgbmRuYm9vc3Q6OmZhY3Rvcnk8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4sIGNvdW50aW5nX2FsbG9jYXRvcjx2b2lkPiwKLSAgICAgICAgICAgICAgbmRuYm9vc3Q6OmZhY3RvcnlfcGFzc2VzX2FsbG9jX3RvX3NtYXJ0X3BvaW50ZXIgPigpKG9uZSx0d28pICk7Ci0gICAgICBCT09TVF9URVNUKCppbnN0YW5jZSA9PSAzKTsKLSAgICB9Ci0gICAgQk9PU1RfVEVTVChjb3VudGluZ19hbGxvY2F0b3I8c3VtPjo6bl9hbGxvY2F0ZWQgPT0gMik7IAotICAgIEJPT1NUX1RFU1QoY291bnRpbmdfYWxsb2NhdG9yPHN1bT46Om5fZGVhbGxvY2F0ZWQgPT0gMik7Ci0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvdmFsdWVfZmFjdG9yeS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L3ZhbHVlX2ZhY3RvcnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDYyZmZiLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvdmFsdWVfZmFjdG9yeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKLSAgCi0gICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKLSAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC92YWx1ZV9mYWN0b3J5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLWNsYXNzIHN1bSAKLXsKLSAgICBpbnQgdmFsX3N1bTsKLSAgcHVibGljOgotICAgIHN1bShpbnQgYSwgaW50IGIpIDogdmFsX3N1bShhICsgYikgeyB9Ci0gICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+dmFsX3N1bTsgfQotfTsKLQotaW50IG1haW4oKQotewotICAgIGludCBvbmUgPSAxLCB0d28gPSAyOwotICAgIHsKLSAgICAgIHN1bSBpbnN0YW5jZSggbmRuYm9vc3Q6OnZhbHVlX2ZhY3Rvcnk8IHN1bSA+KCkob25lLHR3bykgKTsKLSAgICAgIEJPT1NUX1RFU1QoaW5zdGFuY2UgPT0gMyk7Ci0gICAgfQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvSmFtZmlsZSBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjY1NDk3Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotCi0jIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotIwotIyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0jIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6L1wvd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi11c2luZyBxdWlja2Jvb2sgOwotCi14bWwgZm9yd2FyZCA6IGZvcndhcmQucWJrIDsKLWJvb3N0Ym9vayBzdGFuZGFsb25lIDogZm9yd2FyZAotICA6Ci0gICAgICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgotICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LmxpYnJhcmllcz0uLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtCi0gICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuc2VjdGlvbi5kZXB0aD0wCi0gICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuZmlyc3Quc2VjdGlvbnM9MAotICAgICAgICA8eHNsOnBhcmFtPmdlbmVyYXRlLnNlY3Rpb24udG9jLmxldmVsPTIKLSAgICAgICAgPHhzbDpwYXJhbT50b2MubWF4LmRlcHRoPTEKLSAgOwotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvZm9yd2FyZC5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvZm9yd2FyZC5xYmsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjIyN2QuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2ZvcndhcmQucWJrCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLVtsaWJyYXJ5IEJvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZAotICBbcXVpY2tib29rIDEuM10KLSAgW3ZlcnNpb24gMS4wXQotICBbYXV0aG9ycyBbU2Nod2luZ2VyLCBUb2JpYXNdXQotICBbY29weXJpZ2h0IDIwMDcgMjAwOCBUb2JpYXMgU2Nod2luZ2VyXQotICBbbGljZW5zZQotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0gICAgICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0gICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0XSkKLSAgXQotICBbcHVycG9zZSBGdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMgZm9yIGdlbmVyaWMgYXJndW1lbnQgZm9yd2FyZGluZy5dCi0gIFtjYXRlZ29yeSBoaWdoZXItb3JkZXJdCi0gIFtjYXRlZ29yeSBnZW5lcmljXQotICBbbGFzdC1yZXZpc2lvbiAkRGF0ZTogMjAwOC8xMS8wMSAxOTo1ODo1MCAkXQotXQotCi1bZGVmIF9fdW5zcGVjaWZpZWRfXyAgICAgICAgICAgIC91bnNwZWNpZmllZC9dCi1bZGVmIF9fYm9vc3RfcmVmX18gICAgICAgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwgQm9vc3QuUmVmXV0KLVtkZWYgX19ib29zdF9yZXN1bHRfb2ZfXyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIEJvb3N0LlJlc3VsdE9mXV0KLVtkZWYgX19ib29zdF9fcmVzdWx0X29mX18gICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIGBib29zdDo6cmVzdWx0X29mYF1dCi1bZGVmIF9fdGhlX2ZvcndhcmRpbmdfcHJvYmxlbV9fIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0gVGhlIEZvcndhcmRpbmcgUHJvYmxlbV1dCi1bZGVmIF9fYm9vc3RfZnVzaW9uX18gICAgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdXNpb24vZG9jL2h0bWwvaW5kZXguaHRtbCBCb29zdC5GdXNpb25dXQotCi1bc2VjdGlvbiBCcmllZiBEZXNjcmlwdGlvbl0KLQotYGJvb3N0Ojpmb3J3YXJkX2FkYXB0ZXJgIHByb3ZpZGVzIGEgcmV1c2FibGUgYWRhcHRlciB0ZW1wbGF0ZSBmb3IgZnVuY3Rpb24KLW9iamVjdHMuIEl0IGZvcndhcmRzIFJWYWx1ZXMgYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgd2hpbGUgbGVhdmluZyBMVmFsdWVzCi1hcy1pcy4KLQotICAgIHN0cnVjdCBnIC8vIGZ1bmN0aW9uIG9iamVjdCB0aGF0IG9ubHkgYWNjZXB0IExWYWx1ZXMKLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4KLSAgICAgICAgdm9pZCBvcGVyYXRvcigpKFQwICYgdDAsIFQxICYgdDEsIFQyICYgdDIpIGNvbnN0OwotCi0gICAgICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKLSAgICB9OwotCi0gICAgLy8gQWRhcHRlZCB2ZXJzaW9uIGFsc28gYWNjZXB0cyBSVmFsdWVzIGFuZCBmb3J3YXJkcwotICAgIC8vIHRoZW0gYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgTFZhbHVlcyBhcy1pcwotICAgIHR5cGVkZWYgYm9vc3Q6OmZvcndhcmRfYWRhcHRlcjxnPiBmOwotCi1Bbm90aGVyIGFkYXB0ZXIsIGBib29zdDo6bGlnaHdlaWdodF9mb3J3YXJkX2FkYXB0ZXJgIGFsbG93cyBmb3J3YXJkaW5nIHdpdGggCi1zb21lIGhlbHAgZnJvbSB0aGUgdXNlciBhY2NlcHRpbmcgYW5kIHVud3JhcHBpbmcgcmVmZXJlbmNlIHdyYXBwZXJzIChzZWUgCi1fX2Jvb3N0X3JlZl9fKSBmb3IgcmVmZXJlbmNlIGFyZ3VtZW50cywgY29uc3QgcXVhbGlmeWluZyBhbGwgb3RoZXIgYXJndW1lbnRzLiAKLQotVGhlIHRhcmdldCBmdW5jdGlvbnMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggX19ib29zdF9yZXN1bHRfb2ZfXywgYW5kIHNvIGFyZQotdGhlIGFkYXB0ZXJzLgotCi1bZW5kc2VjdF0KLQotW3NlY3Rpb24gQmFja2dyb3VuZF0KLQotTGV0J3Mgc3VwcG9zZSB3ZSBoYXZlIHNvbWUgZnVuY3Rpb24gYGZgIHRoYXQgd2UgY2FuIGNhbGwgbGlrZSB0aGlzOgotCi0gICAgZigxMjMsYV92YXJpYWJsZSk7Ci0KLU5vdyB3ZSB3YW50IHRvIHdyaXRlIGFub3RoZXIsIGdlbmVyaWMgZnVuY3Rpb24gYGdgIHRoYXQgY2FuIGJlIGNhbGxlZCB0aGUKLXNhbWUgd2F5IGFuZCByZXR1cm5zIHNvbWUgb2JqZWN0IHRoYXQgY2FsbHMgYGZgIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgotCi0gICAgZigxMjMsYV92YXJpYWJsZSkgPT0gZyhmLDEyMyxhX3ZhcmlhYmxlKS5jYWxsX2YoKQotCi1baGVhZGluZyBXaHkgd291bGQgd2Ugd2FudCB0byBkbyBpdCwgYW55d2F5P10KLQotTWF5YmUgd2Ugd2FudCB0byBydW4gYGZgIHNldmVyYWwgdGltZXMuIE9yIG1heWJlIHdlIHdhbnQgdG8gcnVuIGl0IHdpdGhpbgotYW5vdGhlciB0aHJlYWQuIE1heWJlIHdlIGp1c3Qgd2FudCB0byBlbmNhcHN1bGF0ZSB0aGUgY2FsbCBleHByZXNzaW9uIGZvciBub3csIAotYW5kIHRoZW4gdXNlIGl0IHdpdGggb3RoZXIgY29kZSB0aGF0IGFsbG93cyB0byBjb21wb3NlIG1vcmUgY29tcGxleCBleHByZXNzaW9ucwotaW4gb3JkZXIgdG8gZGVjb21wb3NlIGl0IHdpdGggQysrIHRlbXBsYXRlcyBhbmQgaGF2ZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgc29tZSAKLW1hY2hpbmVyeSB0aGF0IGV2ZW50dWFsbHkgY2FsbHMgYGZgIGF0IHJ1bnRpbWUgKGluIG90aGVyIHdvcmRzOyBhcHBseSBhCi10ZWNobmlxdWUgdGhhdCBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcyBFeHByZXNzaW9uIFRlbXBsYXRlcykuIAotCi1baGVhZGluZyBOb3csIGhvdyBkbyB3ZSBkbyBpdD9dCi0KLVRoZSBiYWQgbmV3cyBpczogSXQncyBpbXBvc3NpYmxlLiAKLQotVGhhdCBpcyBzbyBiZWNhdXNlIHRoZXJlIGlzIGEgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiBhIHZhcmlhYmxlIGFuZCBhbgotZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBpdHMgdmFsdWU6IEdpdmVuCi0KLSAgICBpbnQgeTsKLSAgICBpbnQgY29uc3QgeiA9IDA7Ci0KLWFuZAotCi0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMxKFQgJiB4KTsKLQotd2UgY2FuIGNhbGwKLQotICAgIGZ1bmMxKHkpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLWNvbnN0IG9iamVjdAotICAgIGZ1bmMxKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0Ci0KLXdoZXJlCi0KLSAgICBmdW5jMSgxKTsgLy8gZmFpbHMgdG8gY29tcGlsZS4KLQotVGhpcyB3YXkgd2UgY2FuIHNhZmVseSBoYXZlIGBmdW5jMWAgc3RvcmUgaXRzIHJlZmVyZW5jZSBhcmd1bWVudCBhbmQgdGhlIAotY29tcGlsZXIga2VlcHMgdXMgZnJvbSBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB3aXRoIHRlbXBvcmFyeSBsaWZldGltZS4KLQotSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBub24tY29uc3RuZXNzIGFuZCB3aGV0aGVyIGFuIG9iamVjdCBiaW5kcyB0byBhCi1ub24tY29uc3QgcmVmZXJlbmNlIHBhcmFtZXRlciBhcmUgdHdvIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBUaGUgbGF0dGVyIGlzIHRoZQotZGlzdGluY3Rpb24gYmV0d2VlbiBMVmFsdWVzIGFuZCBSVmFsdWVzLiBUaGUgbmFtZXMgc3RlbSBmcm9tIHRoZSBsZWZ0IGhhbmQgc2lkZQotYW5kIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBleHByZXNzaW9ucywgdGh1cyBMVmFsdWVzIGFyZSB0eXBpY2FsbHkKLXRoZSBvbmVzIHlvdSBjYW4gYXNzaWduIHRvLCBhbmQgUlZhbHVlcyB0aGUgdGVtcG9yYXJ5IHJlc3VsdHMgZnJvbSB0aGUgcmlnaHQKLWhhbmQgc2lkZSBleHByZXNzaW9uLiAKLQotICAgIHkgPSAxKzI7ICAgICAgICAvLyBhIGlzIExWYWx1ZSwgMSsyIGlzIHRoZSBleHByZXNzaW9uIHByb2R1Y2luZyB0aGUgUlZhbHVlLAotICAgIC8vIDErMiA9IGE7ICAgICAvLyB1c3VhbGx5IG1ha2VzIG5vIHNlbnNlLiAKLQotICAgIGZ1bmMxKHkpOyAgICAgICAvLyB3b3JrcywgYmVjYXVzZSB5IGlzIGFuIExWYWx1ZQotICAgIC8vIGZ1bmMxKDErMik7ICAvLyBmYWlscyB0byBjb21waWxlLCBiZWNhdXNlIHdlIG9ubHkgZ290IGFuIFJWYWx1ZS4KLQotSWYgd2UgYWRkIGNvbnN0IHF1YWxpZmljYXRpb24gb24gdGhlIHBhcmFtZXRlciwgb3VyIGZ1bmN0aW9uIGFsc28gYWNjZXB0cwotUlZhbHVlczogCi0KLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHZvaWQgZnVuYzIoVCBjb25zdCAmIHgpOwotCi0gICAgLy8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6Ci0gICAgZnVuYzIoMSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCB0ZW1wb3JhcnksIG9iamVjdCwKLSAgICBmdW5jMih5KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCwgd2hpbGUgeSBpcyBub3QgY29uc3QsIGFuZAotICAgIGZ1bmMyKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0LCBqdXN0IGxpa2Ugei4KLQotSW4gYWxsIGNhc2VzLCB0aGUgYXJndW1lbnQgYHhgIGluIGBmdW5jMmAgaXMgYSBjb25zdC1xdWFsaWZpZWQgTFZhbHVlLgotV2UgY2FuIHVzZSBmdW5jdGlvbiBvdmVybG9hZGluZyB0byBpZGVudGlmeSBub24tY29uc3QgTFZhbHVlczoKLQotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gdm9pZCBmdW5jMyhUIGNvbnN0ICYgeCk7IC8vICMxCi0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMzKFQgJiB4KTsgICAgICAgLy8gIzIKLQotICAgIC8vIFsuLi5dIGZ1bmN0aW9uIHNjb3BlOgotICAgIGZ1bmMzKDEpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3QsIHRlbXBvcmFyeSBvYmplY3QgaW4gIzEsCi0gICAgZnVuYzMoeSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBub24tY29uc3Qgb2JqZWN0IGluICMyLCBhbmQKLSAgICBmdW5jMyh6KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCBpbiAjMS4KLQotTm90ZSB0aGF0IGFsbCBhcmd1bWVudHMgYHhgIGluIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIGBmdW5jM2AgYXJlIExWYWx1ZXMuCi1JbiBmYWN0LCB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNwb3J0IFJWYWx1ZXMgaW50byBhIGZ1bmN0aW9uIGFzLWlzIGluIEMrKzk4LgotQWxzbyBub3RlIHRoYXQgd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB3aGF0IHVzZWQgdG8gYmUgYSBjb25zdCBxdWFsaWZpZWQKLUxWYWx1ZSBhbmQgYW4gUlZhbHVlLiAKLQotVGhhdCdzIGFzIGNsb3NlIGFzIHdlIGNhbiBnZXQgdG8gYSBnZW5lcmljIGZvcndhcmRpbmcgZnVuY3Rpb24gYGdgIGFzCi1kZXNjcmliZWQgYWJvdmUgYnkgdGhlIG1lYW5zIG9mIEMrKyA5OC4gU2VlIF9fdGhlX2ZvcndhcmRpbmdfcHJvYmxlbV9fIGZvciBhCi12ZXJ5IGRldGFpbGVkIGRpc2N1c3Npb24gaW5jbHVkaW5nIHNvbHV0aW9ucyB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgY2hhbmdlcy4KLQotTm93LCBmb3IgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGl0LCB3ZSBuZWVkIDJeTiBvdmVybG9hZHMgZm9yIE4gcGFyYW1ldGVycwotKGVhY2ggd2l0aCBhbmQgd2l0aG91dCBjb25zdCBxdWFsaWZpZXIpIGZvciBlYWNoIG51bWJlciBvZiBhcmd1bWVudHMgCi0odGhhdCBpcyAyXihObWF4KzEpIC0gMl5ObWluKS4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNvbXBpbGUtdGltZSBjb21wbGV4aXR5IAotaXMgTygyXk4pLCBob3dldmVyIHRoZSBmYWN0b3IgaXMgbG93IHNvIGl0IHdvcmtzIHF1aXRlIHdlbGwgZm9yIGEgcmVhc29uYWJsZQotbnVtYmVyICg8IDEwKSBvZiBhcmd1bWVudHMuCi0KLVtlbmRzZWN0XQotCi1bc2VjdGlvbjpyZWZlcmVuY2UgUmVmZXJlbmNlXQotCi1bc2VjdGlvbiBmb3J3YXJkX2FkYXB0ZXJdCi0KLVtoZWFkaW5nIERlc2NyaXB0aW9uXQotCi1GdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlIGFuZAotUlZhbHVlIGFyZ3VtZW50cy4gUlZhbHVlIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAotTFZhbHVlcy4KLQotQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAotZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LgotSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCAKLXRlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0gYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4KLVNwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYwotbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KLQotX19ib29zdF9yZXN1bHRfb2ZfXyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsCi1leHByZXNzaW9ucy4KLQotW2hlYWRpbmcgSGVhZGVyXQotICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZvcndhcmRfYWRhcHRlci5ocHA+Ci0KLVtoZWFkaW5nIFN5bm9wc2lzXQotCi0gICAgbmFtZXNwYWNlIGJvb3N0Ci0gICAgewotICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgRnVuY3Rpb24sCi0gICAgICAgICAgICBpbnQgQXJpdHlfT3JfTWluQXJpdHkgPSBfX3Vuc3BlY2lmaWVkX18sIGludCBNYXhBcml0eSA9IF9fdW5zcGVjaWZpZWRfXyA+Ci0gICAgICAgIGNsYXNzIGZvcndhcmRfYWRhcHRlcjsKLSAgICB9Ci0KLVt2YXJpYWJsZWxpc3QgTm90YXRpb24KLSAgICBbW2BGYF0gICAgICAgICAgICBbYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZl1dCi0gICAgW1tgZmBdICAgICAgICAgICAgW2FuIG9iamVjdCBjb252ZXJ0aWJsZSB0byBgRmBdXQotICAgIFtbYEZBYF0gICAgICAgICAgIFt0aGUgdHlwZSBgZm9yd2FyZF9hZGFwdGVyPEY+YF1dCi0gICAgW1tgZmFgXSAgICAgICAgICAgW2FuIGluc3RhbmNlIG9iamVjdCBvZiBgRkFgLCBpbml0aWFsaXplZCB3aXRoIGBmYF1dCi0gICAgW1tgYTBgLi4uYGFOYF0gICAgW2FyZ3VtZW50cyB0byBgZmFgXV0KLV0KLQotVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQotCi0gIF9fYm9vc3RfX3Jlc3VsdF9vZl9fPEYqKFRBMCBbY29uc3RdJi4uLlRBTiBbY29uc3RdJl0pPjo6dHlwZQotCi13aGVyZSBgVEEwYC4uLmBUQU5gIGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgYGEwYC4uLmBhTmAuCi0KLVtoZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQotCi1bdGFibGUKLSAgICBbW0V4cHJlc3Npb25dICAgICAgW1NlbWFudGljc11dCi0gICAgW1tgRkEoZilgXSAgICAgICAgIFtjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCBgZmAuXV0KLSAgICBbW2BGQSgpYF0gICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIGBGYCdzIGRlZmF1bHQgY29uc3RydWN0b3IuXV0KLSAgICBbW2BmYShhMGAuLi5gYU4pYF0gW2NhbGxzIGBmYCB3aXRoIHdpdGggYXJndW1lbnRzIGBhMGAuLi5gYU5gLl1dCi1dCi0KLVtoZWFkaW5nIExpbWl0c10KLQotVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfRk9SV0FSRF9BREFQVEVSX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQgdGhlCi1tYXhpbXVtIGNhbGwgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDYuCi0KLVtoZWFkaW5nIENvbXBsZXhpdHldCi0KLVByZXByb2Nlc3NpbmcgdGltZTogTygyXk4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4KLUNvbXBpbGUgdGltZTogTygyXk4pLCB3aGVyZSBOIGRlcGVuZHMgb24gdGhlIGFyaXR5IHJhbmdlLgotUnVuIHRpbWU6IE8oMCkgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMsIE8oMSkgb3RoZXJ3aXNlLgotCi1bZW5kc2VjdF0KLQotCi1bc2VjdGlvbiBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXJdCi0KLVtoZWFkaW5nIERlc2NyaXB0aW9uXQotCi1GdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlIGFuZAotUlZhbHVlIGFyZ3VtZW50cy4gQWxsIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAotTFZhbHVlcywgZXhjZXB0IGZvciByZWZlcmVuY2Ugd3JhcHBlcnMgd2hpY2ggYXJlIHVud3JhcHBlZCBhbmQgbWF5IHlpZWxkCi1ub24tY29uc3QgTFZhbHVlcy4KLQotQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAotZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LgotSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCAKLXRlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0gYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4KLVNwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYwotbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KLQotX19ib29zdF9yZXN1bHRfb2ZfXyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsCi1leHByZXNzaW9ucy4KLQotW2hlYWRpbmcgSGVhZGVyXQotICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5ocHA+Ci0KLVtoZWFkaW5nIFN5bm9wc2lzXQotCi0gICAgbmFtZXNwYWNlIGJvb3N0Ci0gICAgewotICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgRnVuY3Rpb24sCi0gICAgICAgICAgICBpbnQgQXJpdHlfT3JfTWluQXJpdHkgPSBfX3Vuc3BlY2lmaWVkX18sIGludCBNYXhBcml0eSA9IF9fdW5zcGVjaWZpZWRfXyA+Ci0gICAgICAgIHN0cnVjdCBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI7Ci0gICAgfQotCi1bdmFyaWFibGVsaXN0IE5vdGF0aW9uCi0gICAgW1tgRmBdICAgICAgICAgW2EgcG9zc2libHkgY29uc3QgcXVhbGlmaWVkIGZ1bmN0aW9uIG9iamVjdCB0eXBlIG9yIHJlZmVyZW5jZSB0eXBlIHRoZXJlb2ZdXQotICAgIFtbYGZgXSAgICAgICAgIFthbiBvYmplY3QgY29udmVydGlibGUgdG8gYEZgXV0KLSAgICBbW2BGQWBdICAgICAgICBbdGhlIHR5cGUgYGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjxGPmBdXQotICAgIFtbYGZhYF0gICAgICAgIFthbiBpbnN0YW5jZSBvZiBgRkFgLCBpbml0aWFsaXplZCB3aXRoIGBmYF1dCi0gICAgW1tgYTBgLi4uYGFOYF0gW2FyZ3VtZW50cyB0byBgZmFgXV0KLV0KLQotVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQotCi0gIF9fYm9vc3RfX3Jlc3VsdF9vZl9fPEYqKFRBMCBbY29uc3RdJi4uLlRBTiBbY29uc3RdJl0pPjo6dHlwZQotCi13aGVyZSBgVEEwYC4uLmBUQU5gIGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgYGEwYC4uLmBhTmAuCi0KLVtoZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQotCi1bdGFibGUKLSAgICBbW0V4cHJlc3Npb25dICAgICAgW1NlbWFudGljc11dCi0gICAgW1tgRkEoZilgXSAgICAgICAgIFtjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCBgZmAuXV0KLSAgICBbW2BGQSgpYF0gICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIGBGYCdzIGRlZmF1bHQgY29uc3RydWN0b3IuXV0KLSAgICBbW2BmYShhMGAuLi5gYU4pYF0gW2NhbGxzIGBmYCB3aXRoIHdpdGggY29uc3QgYXJndW1lbnRzIGBhMGAuLi5gYU5gLiBJZiBgYUlgIGlzIGEgCi0gICAgICByZWZlcmVuY2Ugd3JhcHBlciBpdCBpcyB1bndyYXBwZWQuXV0KLV0KLQotW2hlYWRpbmcgTGltaXRzXQotCi1UaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9MSUdIVFdFSUdIVF9GT1JXQVJEX0FEQVBURVJfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkCi10byBzZXQgdGhlIG1heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCi0KLVtoZWFkaW5nIENvbXBsZXhpdHldCi0KLVByZXByb2Nlc3NpbmcgdGltZTogTyhOKSwgd2hlcmUgTiBpcyB0aGUgYXJpdHkgbGltaXQuCi1Db21waWxlIHRpbWU6IE8oTiksIHdoZXJlIE4gaXMgdGhlIGVmZmVjdGl2ZSBhcml0eSBvZiBhIGNhbGwuCi1SdW4gdGltZTogTygwKSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcywgTygxKSBvdGhlcndpc2UuCi0KLVtlbmRzZWN0XQotCi1bZW5kc2VjdF0KLQotCi1bc2VjdGlvbiBBY2tub3dsZWRnZW1lbnRzXQotCi1BcyB0aGVzZSB1dGlsaXRpZXMgYXJlIGZhY3RvcmVkIG91dCBvZiB0aGUgX19ib29zdF9mdXNpb25fXyBmdW5jdGlvbmFsIG1vZHVsZSwgCi1JIHdhbnQgdG8gdGhhbmsgRGFuIE1hcnNkZW4gYW5kIEpvZWwgZGUgR3V6bWFuIGZvciBsZXR0aW5nIG1lIHBhcnRpY2lwYXRlIGluIHRoZQotZGV2ZWxvcG1lbnQgb2YgdGhhdCBncmVhdCBsaWJyYXJ5IGluIHRoZSBmaXJzdCBwbGFjZS4KLQotRnVydGhlciwgSSB3YW50IHRvIGNyZWRpdCB0aGUgYXV0aG9ycyBvZiB0aGUgcmVmZXJlbmNlcyBiZWxvdywgZm9yIHRoZWlyCi1pbi1kZXB0aCBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaGVyZS4KLQotTGFzdCBidXQgbm90IGxlYXN0IEkgd2FudCB0byB0aGFuayBWZXNhIEthcm5vdmVuIGFuZCBQYXVsIE1lbnNvbmlkZXMgZm9yIHRoZQotQm9vc3QgUHJlcHJvY2Vzc29yIGxpYnJhcnkuIFdpdGhvdXQgaXQsIEkgd291bGQgaGF2ZSBlbmRlZCB1cCB3aXRoIGFuIGV4dGVybmFsCi1jb2RlIGdlbmVyYXRvciBmb3IgdGhpcyBvbmUuCi0KLVtlbmRzZWN0XQotCi0KLVtzZWN0aW9uIFJlZmVyZW5jZXNdCi0KLSMgW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDAyL24xMzg1Lmh0bSBUaGUgRm9yd2FyZGluZyBQcm9ibGVtXSwKLSAgUGV0ZXIgRGltb3YsIEhvd2FyZCBFLiBIaW5uYW50LCBEYXZpZCBBYnJhaGFtcywgMjAwMgotCi0jIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiBCb29zdC5SZXN1bHRPZl0sCi0gIERvdWdsYXMgR3JlZ29yLCAyMDA0Ci0KLSMgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9yZWYuaHRtbCBCb29zdC5SZWZdLCAKLSAgSmFha2tvIEphcnZpLCBQZXRlciBEaW1vdiwgRG91Z2xhcyBHcmVnb3IsIERhdmlkIEFicmFoYW1zLCAxOTk5LTIwMDIKLQotW2VuZHNlY3RdCi0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWQ1MmIwLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NzEgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5DaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZvcndhcmQgMS4wPC90aXRsZT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc4LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9Gb3J3YXJkIDEuMCI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj4KLTxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQiPjwvYT5DaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZvcndhcmQgMS4wPC9oMj48L2Rpdj4KLTxkaXY+PGRpdiBjbGFzcz0iYXV0aG9yIj48aDMgY2xhc3M9ImF1dGhvciI+Ci08c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Ub2JpYXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdXJuYW1lIj5TY2h3aW5nZXI8L3NwYW4+Ci08L2gzPjwvZGl2PjwvZGl2PgotPGRpdj48cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgJiMxNjk7IDIwMDcsIDIwMDggVG9iaWFzIFNjaHdpbmdlcjwvcD48L2Rpdj4KLTxkaXY+PGRpdiBjbGFzcz0ibGVnYWxub3RpY2UiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmxlZ2FsIj48L2E+PHA+Ci0gICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKLSAgICAgIDwvcD4KLTwvZGl2PjwvZGl2PgotPC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPgotPHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPgotPGRsIGNsYXNzPSJ0b2MiPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5icmllZl9kZXNjcmlwdGlvbiI+QnJpZWYgRGVzY3JpcHRpb248L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQiPkJhY2tncm91bmQ8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZSI+UmVmZXJlbmNlPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5hY2tub3dsZWRnZW1lbnRzIj5BY2tub3dsZWRnZW1lbnRzPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2VzIj5SZWZlcmVuY2VzPC9hPjwvc3Bhbj48L2R0PgotPC9kbD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJyaWVmX2Rlc2NyaXB0aW9uIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJyaWVmX2Rlc2NyaXB0aW9uIiB0aXRsZT0iQnJpZWYgRGVzY3JpcHRpb24iPkJyaWVmIERlc2NyaXB0aW9uPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPgotICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PC9jb2RlPiBwcm92aWRlcyBhIHJldXNhYmxlIGFkYXB0ZXIKLSAgICAgIHRlbXBsYXRlIGZvciBmdW5jdGlvbiBvYmplY3RzLiBJdCBmb3J3YXJkcyBSVmFsdWVzIGFzIHJlZmVyZW5jZXMgdG8gY29uc3QsCi0gICAgICB3aGlsZSBsZWF2aW5nIExWYWx1ZXMgYXMtaXMuCi0gICAgPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nPC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZnVuY3Rpb24gb2JqZWN0IHRoYXQgb25seSBhY2NlcHQgTFZhbHVlczwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCkoPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dDA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dDE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dDI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLQotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPn07PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gQWRhcHRlZCB2ZXJzaW9uIGFsc28gYWNjZXB0cyBSVmFsdWVzIGFuZCBmb3J3YXJkczwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB0aGVtIGFzIHJlZmVyZW5jZXMgdG8gY29uc3QsIExWYWx1ZXMgYXMtaXM8L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBBbm90aGVyIGFkYXB0ZXIsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bGlnaHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PC9jb2RlPiBhbGxvd3MgZm9yd2FyZGluZwotICAgICAgd2l0aCBzb21lIGhlbHAgZnJvbSB0aGUgdXNlciBhY2NlcHRpbmcgYW5kIHVud3JhcHBpbmcgcmVmZXJlbmNlIHdyYXBwZXJzIChzZWUKLSAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL3JlZi5odG1sIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlZjwvYT4pIGZvcgotICAgICAgcmVmZXJlbmNlIGFyZ3VtZW50cywgY29uc3QgcXVhbGlmeWluZyBhbGwgb3RoZXIgYXJndW1lbnRzLgotICAgIDwvcD4KLTxwPgotICAgICAgVGhlIHRhcmdldCBmdW5jdGlvbnMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZXN1bHRPZjwvYT4sCi0gICAgICBhbmQgc28gYXJlIHRoZSBhZGFwdGVycy4KLSAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQiIHRpdGxlPSJCYWNrZ3JvdW5kIj5CYWNrZ3JvdW5kPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPgotICAgICAgTGV0J3Mgc3VwcG9zZSB3ZSBoYXZlIHNvbWUgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+Ci0gICAgICB0aGF0IHdlIGNhbiBjYWxsIGxpa2UgdGhpczoKLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX3ZhcmlhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBOb3cgd2Ugd2FudCB0byB3cml0ZSBhbm90aGVyLCBnZW5lcmljIGZ1bmN0aW9uIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+PC9jb2RlPgotICAgICAgdGhhdCBjYW4gYmUgY2FsbGVkIHRoZSBzYW1lIHdheSBhbmQgcmV0dXJucyBzb21lIG9iamVjdCB0aGF0IGNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPiB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cy4KLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX3ZhcmlhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV92YXJpYWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KS48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNhbGxfZjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+Ci08L3ByZT4KLTxoND4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLmgwIj48L2E+Ci0gICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC53aHlfd291bGRfd2Vfd2FudF90b19kb19pdF9fYW55d2F5XyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC53aHlfd291bGRfd2Vfd2FudF90b19kb19pdF9fYW55d2F5XyI+V2h5Ci0gICAgICB3b3VsZCB3ZSB3YW50IHRvIGRvIGl0LCBhbnl3YXk/PC9hPgotICAgIDwvaDQ+Ci08cD4KLSAgICAgIE1heWJlIHdlIHdhbnQgdG8gcnVuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPiBzZXZlcmFsCi0gICAgICB0aW1lcy4gT3IgbWF5YmUgd2Ugd2FudCB0byBydW4gaXQgd2l0aGluIGFub3RoZXIgdGhyZWFkLiBNYXliZSB3ZSBqdXN0IHdhbnQKLSAgICAgIHRvIGVuY2Fwc3VsYXRlIHRoZSBjYWxsIGV4cHJlc3Npb24gZm9yIG5vdywgYW5kIHRoZW4gdXNlIGl0IHdpdGggb3RoZXIgY29kZQotICAgICAgdGhhdCBhbGxvd3MgdG8gY29tcG9zZSBtb3JlIGNvbXBsZXggZXhwcmVzc2lvbnMgaW4gb3JkZXIgdG8gZGVjb21wb3NlIGl0IHdpdGgKLSAgICAgIEMrKyB0ZW1wbGF0ZXMgYW5kIGhhdmUgdGhlIGNvbXBpbGVyIGdlbmVyYXRlIHNvbWUgbWFjaGluZXJ5IHRoYXQgZXZlbnR1YWxseQotICAgICAgY2FsbHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IGF0IHJ1bnRpbWUgKGluIG90aGVyCi0gICAgICB3b3JkczsgYXBwbHkgYSB0ZWNobmlxdWUgdGhhdCBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcyBFeHByZXNzaW9uIFRlbXBsYXRlcykuCi0gICAgPC9wPgotPGg0PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQuaDEiPjwvYT4KLSAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLm5vd19faG93X2RvX3dlX2RvX2l0XyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC5ub3dfX2hvd19kb193ZV9kb19pdF8iPk5vdywgaG93Ci0gICAgICBkbyB3ZSBkbyBpdD88L2E+Ci0gICAgPC9oND4KLTxwPgotICAgICAgVGhlIGJhZCBuZXdzIGlzOiBJdCdzIGltcG9zc2libGUuCi0gICAgPC9wPgotPHA+Ci0gICAgICBUaGF0IGlzIHNvIGJlY2F1c2UgdGhlcmUgaXMgYSBzbGlnaHQgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgdmFyaWFibGUgYW5kIGFuIGV4cHJlc3Npb24KLSAgICAgIHRoYXQgZXZhbHVhdGVzIHRvIGl0cyB2YWx1ZTogR2l2ZW4KLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj56PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBhbmQKLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgd2UgY2FuIGNhbGwKLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBub24tY29uc3Qgb2JqZWN0PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj56PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3Q8L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgd2hlcmUKLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZmFpbHMgdG8gY29tcGlsZS48L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgVGhpcyB3YXkgd2UgY2FuIHNhZmVseSBoYXZlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjwvY29kZT4KLSAgICAgIHN0b3JlIGl0cyByZWZlcmVuY2UgYXJndW1lbnQgYW5kIHRoZSBjb21waWxlciBrZWVwcyB1cyBmcm9tIHN0b3JpbmcgYSByZWZlcmVuY2UKLSAgICAgIHRvIGFuIG9iamVjdCB3aXRoIHRlbXBvcmFyeSBsaWZldGltZS4KLSAgICA8L3A+Ci08cD4KLSAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgbm9uLWNvbnN0bmVzcyBhbmQgd2hldGhlciBhbiBvYmplY3QgYmluZHMgdG8KLSAgICAgIGEgbm9uLWNvbnN0IHJlZmVyZW5jZSBwYXJhbWV0ZXIgYXJlIHR3byBkaWZmZXJlbnQgcHJvcGVydGllcy4gVGhlIGxhdHRlciBpcwotICAgICAgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gTFZhbHVlcyBhbmQgUlZhbHVlcy4gVGhlIG5hbWVzIHN0ZW0gZnJvbSB0aGUgbGVmdCBoYW5kCi0gICAgICBzaWRlIGFuZCB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgZXhwcmVzc2lvbnMsIHRodXMgTFZhbHVlcyBhcmUgdHlwaWNhbGx5Ci0gICAgICB0aGUgb25lcyB5b3UgY2FuIGFzc2lnbiB0bywgYW5kIFJWYWx1ZXMgdGhlIHRlbXBvcmFyeSByZXN1bHRzIGZyb20gdGhlIHJpZ2h0Ci0gICAgICBoYW5kIHNpZGUgZXhwcmVzc2lvbi4KLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4rPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+ICAgICAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gYSBpcyBMVmFsdWUsIDErMiBpcyB0aGUgZXhwcmVzc2lvbiBwcm9kdWNpbmcgdGhlIFJWYWx1ZSw8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gMSsyID0gYTsgICAgIC8vIHVzdWFsbHkgbWFrZXMgbm8gc2Vuc2UuIDwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHdvcmtzLCBiZWNhdXNlIHkgaXMgYW4gTFZhbHVlPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZ1bmMxKDErMik7ICAvLyBmYWlscyB0byBjb21waWxlLCBiZWNhdXNlIHdlIG9ubHkgZ290IGFuIFJWYWx1ZS48L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgSWYgd2UgYWRkIGNvbnN0IHF1YWxpZmljYXRpb24gb24gdGhlIHBhcmFtZXRlciwgb3VyIGZ1bmN0aW9uIGFsc28gYWNjZXB0cyBSVmFsdWVzOgotICAgIDwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IHRlbXBvcmFyeSwgb2JqZWN0LDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0LCB3aGlsZSB5IGlzIG5vdCBjb25zdCwgYW5kPC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj56PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QsIGp1c3QgbGlrZSB6Ljwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBJbiBhbGwgY2FzZXMsIHRoZSBhcmd1bWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjwvY29kZT4KLSAgICAgIGluIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMyPC9zcGFuPjwvY29kZT4gaXMgYSBjb25zdC1xdWFsaWZpZWQKLSAgICAgIExWYWx1ZS4gV2UgY2FuIHVzZSBmdW5jdGlvbiBvdmVybG9hZGluZyB0byBpZGVudGlmeSBub24tY29uc3QgTFZhbHVlczoKLSAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vICMxPC9zcGFuPgotPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyAjMjwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dIGZ1bmN0aW9uIHNjb3BlOjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCwgdGVtcG9yYXJ5IG9iamVjdCBpbiAjMSw8L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIG5vbi1jb25zdCBvYmplY3QgaW4gIzIsIGFuZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ejwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0IGluICMxLjwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICBOb3RlIHRoYXQgYWxsIGFyZ3VtZW50cyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjwvY29kZT4gaW4KLSAgICAgIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjwvY29kZT4KLSAgICAgIGFyZSBMVmFsdWVzLiBJbiBmYWN0LCB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNwb3J0IFJWYWx1ZXMgaW50byBhIGZ1bmN0aW9uCi0gICAgICBhcy1pcyBpbiBDKys5OC4gQWxzbyBub3RlIHRoYXQgd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB3aGF0IHVzZWQgdG8gYmUKLSAgICAgIGEgY29uc3QgcXVhbGlmaWVkIExWYWx1ZSBhbmQgYW4gUlZhbHVlLgotICAgIDwvcD4KLTxwPgotICAgICAgVGhhdCdzIGFzIGNsb3NlIGFzIHdlIGNhbiBnZXQgdG8gYSBnZW5lcmljIGZvcndhcmRpbmcgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zzwvc3Bhbj48L2NvZGU+IGFzIGRlc2NyaWJlZCBhYm92ZSBieSB0aGUgbWVhbnMgb2YgQysrCi0gICAgICA5OC4gU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDIvbjEzODUuaHRtIiB0YXJnZXQ9Il90b3AiPlRoZQotICAgICAgRm9yd2FyZGluZyBQcm9ibGVtPC9hPiBmb3IgYSB2ZXJ5IGRldGFpbGVkIGRpc2N1c3Npb24gaW5jbHVkaW5nIHNvbHV0aW9ucwotICAgICAgdGhhdCByZXF1aXJlIGxhbmd1YWdlIGNoYW5nZXMuCi0gICAgPC9wPgotPHA+Ci0gICAgICBOb3csIGZvciBhY3R1YWxseSBpbXBsZW1lbnRpbmcgaXQsIHdlIG5lZWQgMl5OIG92ZXJsb2FkcyBmb3IgTiBwYXJhbWV0ZXJzIChlYWNoCi0gICAgICB3aXRoIGFuZCB3aXRob3V0IGNvbnN0IHF1YWxpZmllcikgZm9yIGVhY2ggbnVtYmVyIG9mIGFyZ3VtZW50cyAodGhhdCBpcyAyXihObWF4KzEpCi0gICAgICAtIDJeTm1pbikuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoZSBjb21waWxlLXRpbWUgY29tcGxleGl0eSBpcyBPKDJeTiksIGhvd2V2ZXIKLSAgICAgIHRoZSBmYWN0b3IgaXMgbG93IHNvIGl0IHdvcmtzIHF1aXRlIHdlbGwgZm9yIGEgcmVhc29uYWJsZSBudW1iZXIgKCZsdDsgMTApCi0gICAgICBvZiBhcmd1bWVudHMuCi0gICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZSIgdGl0bGU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyIj5mb3J3YXJkX2FkYXB0ZXI8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlciIgdGl0bGU9ImZvcndhcmRfYWRhcHRlciI+Zm9yd2FyZF9hZGFwdGVyPC9hPgotPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxoNT4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmgwIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmRlc2NyaXB0aW9uIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmRlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT4KLSAgICAgIDwvaDU+Ci08cD4KLSAgICAgICAgRnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXIgdGVtcGxhdGUgd2hvc2UgaW5zdGFuY2VzIGFyZSBjYWxsYWJsZSB3aXRoIExWYWx1ZQotICAgICAgICBhbmQgUlZhbHVlIGFyZ3VtZW50cy4gUlZhbHVlIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdAotICAgICAgICB0eXBlZCBMVmFsdWVzLgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIEFuIGFyaXR5IGNhbiBiZSBnaXZlbiBhcyBzZWNvbmQsIG51bWVyaWMgbm9uLXR5cGUgdGVtcGxhdGUgYXJndW1lbnQgdG8gcmVzdHJpY3QKLSAgICAgICAgZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LiBJZiBhIHRoaXJkLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50Ci0gICAgICAgIGlzIHByZXNlbnQsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIHRlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0KLSAgICAgICAgYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4gU3BlY2lmeWluZyBhbiBhcml0eSBjYW4gYmUgaGVscGZ1bCB0byBpbXByb3ZlCi0gICAgICAgIHRoZSByZWFkYWJpbGl0eSBvZiBkaWFnbm9zdGljIG1lc3NhZ2VzIGFuZCBjb21waWxlIHRpbWUgcGVyZm9ybWFuY2UuCi0gICAgICA8L3A+Ci08cD4KLSAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZXN1bHRPZjwvYT4KLSAgICAgICAgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZXN1bHQgdHlwZXMgb2Ygc3BlY2lmaWMgY2FsbCBleHByZXNzaW9ucy4KLSAgICAgIDwvcD4KLTxoNT4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmgxIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmhlYWRlciI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oZWFkZXIiPkhlYWRlcjwvYT4KLSAgICAgIDwvaDU+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InByZXByb2Nlc3NvciI+I2luY2x1ZGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ocHA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci08L3ByZT4KLTxoNT4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmgyIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLnN5bm9wc2lzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLnN5bm9wc2lzIj5TeW5vcHNpczwvYT4KLSAgICAgIDwvaDU+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkFyaXR5X09yX01pbkFyaXR5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5zcGVjaWZpZWQ8L2VtPjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPk1heEFyaXR5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5zcGVjaWZpZWQ8L2VtPjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08L3ByZT4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08cCBjbGFzcz0idGl0bGUiPjxiPk5vdGF0aW9uPC9iPjwvcD4KLTxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Ci0gICAgICAgICAgICAgIGEgcG9zc2libHkgY29uc3QgcXVhbGlmaWVkIGZ1bmN0aW9uIG9iamVjdCB0eXBlIG9yIHJlZmVyZW5jZSB0eXBlIHRoZXJlb2YKLSAgICAgICAgICAgIDwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYW4gb2JqZWN0IGNvbnZlcnRpYmxlIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgIDwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Ci0gICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9iamVjdCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48L2NvZGU+LAotICAgICAgICAgICAgICBpbml0aWFsaXplZCB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Ci0gICAgICAgICAgICAgIGFyZ3VtZW50cyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICA8L3A+PC9kZD4KLTwvZGw+Ci08L2Rpdj4KLTxwPgotICAgICAgICBUaGUgcmVzdWx0IHR5cGUgb2YgYSB0YXJnZXQgZnVuY3Rpb24gaW52b2NhdGlvbiBtdXN0IGJlCi0gICAgICA8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF9vZjwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qKDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEEwPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl0mYW1wOy4uLjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEFOPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl0mYW1wO10pJmd0Ozo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50eXBlPC9zcGFuPgotPC9wcmU+Ci08cD4KLSAgICAgICAgd2hlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQU48L3NwYW4+PC9jb2RlPiBkZW5vdGUgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+LgotICAgICAgPC9wPgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDMiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPkV4cHJlc3Npb24KLSAgICAgICAgU2VtYW50aWNzPC9hPgotICAgICAgPC9oNT4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0idGFibGUiPgotPGNvbGdyb3VwPgotPGNvbD4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRoZWFkPjx0cj4KLTx0aD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGg+Ci08dGg+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBTZW1hbnRpY3MKLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGg+Ci08L3RyPjwvdGhlYWQ+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhZGFwdGVyLCBpbml0aWFsaXplcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+LgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPidzCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBjYWxscyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gd2l0aCB3aXRoCi0gICAgICAgICAgICAgICAgICBhcmd1bWVudHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4uCi0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDQiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIubGltaXRzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmxpbWl0cyI+TGltaXRzPC9hPgotICAgICAgPC9oNT4KLTxwPgotICAgICAgICBUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9GT1JXQVJEX0FEQVBURVJfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldAotICAgICAgICB0aGUgbWF4aW11bSBjYWxsIGFyaXR5LiBJdCBkZWZhdWx0cyB0byA2LgotICAgICAgPC9wPgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDUiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuY29tcGxleGl0eSI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5jb21wbGV4aXR5Ij5Db21wbGV4aXR5PC9hPgotICAgICAgPC9oNT4KLTxwPgotICAgICAgICBQcmVwcm9jZXNzaW5nIHRpbWU6IE8oMl5OKSwgd2hlcmUgTiBpcyB0aGUgYXJpdHkgbGltaXQuIENvbXBpbGUgdGltZTogTygyXk4pLAotICAgICAgICB3aGVyZSBOIGRlcGVuZHMgb24gdGhlIGFyaXR5IHJhbmdlLiBSdW4gdGltZTogTygwKSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcywKLSAgICAgICAgTygxKSBvdGhlcndpc2UuCi0gICAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlciI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyIiB0aXRsZT0ibGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyIj5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8L2E+Ci08L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDAiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuZGVzY3JpcHRpb24iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuZGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uPC9hPgotICAgICAgPC9oNT4KLTxwPgotICAgICAgICBGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlCi0gICAgICAgIGFuZCBSVmFsdWUgYXJndW1lbnRzLiBBbGwgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgYXMgcmVmZXJlbmNlLXRvLWNvbnN0IHR5cGVkCi0gICAgICAgIExWYWx1ZXMsIGV4Y2VwdCBmb3IgcmVmZXJlbmNlIHdyYXBwZXJzIHdoaWNoIGFyZSB1bndyYXBwZWQgYW5kIG1heSB5aWVsZAotICAgICAgICBub24tY29uc3QgTFZhbHVlcy4KLSAgICAgIDwvcD4KLTxwPgotICAgICAgICBBbiBhcml0eSBjYW4gYmUgZ2l2ZW4gYXMgc2Vjb25kLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50IHRvIHJlc3RyaWN0Ci0gICAgICAgIGZvcndhcmRpbmcgdG8gYSBzcGVjaWZpYyBhcml0eS4gSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudAotICAgICAgICBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCB0ZW1wbGF0ZSBhcmd1bWVudCBhcmUgdHJlYXRlZCBhcyBtaW5pbXVtCi0gICAgICAgIGFuZCBtYXhpbXVtIGFyaXR5LCByZXNwZWN0aXZlbHkuIFNwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZQotICAgICAgICB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYyBtZXNzYWdlcyBhbmQgY29tcGlsZSB0aW1lIHBlcmZvcm1hbmNlLgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVzdWx0T2Y8L2E+Ci0gICAgICAgIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IHR5cGVzIG9mIHNwZWNpZmljIGNhbGwgZXhwcmVzc2lvbnMuCi0gICAgICA8L3A+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oMSI+PC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oZWFkZXIiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaGVhZGVyIj5IZWFkZXI8L2E+Ci0gICAgICA8L2g1PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJwcmVwcm9jZXNzb3IiPiNpbmNsdWRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aHBwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgotPC9wcmU+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oMiI+PC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5zeW5vcHNpcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5zeW5vcHNpcyI+U3lub3BzaXM8L2E+Ci0gICAgICA8L2g1PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5Bcml0eV9Pcl9NaW5Bcml0eTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVuc3BlY2lmaWVkPC9lbT48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5NYXhBcml0eTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVuc3BlY2lmaWVkPC9lbT48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KLTwvcHJlPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+Tm90YXRpb248L2I+PC9wPgotPGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPgotICAgICAgICAgICAgICBhbiBvYmplY3QgY29udmVydGlibGUgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICA8L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPgotICAgICAgICAgICAgICB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD4KLSAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PC9jb2RlPiwKLSAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgIDwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPgotICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgPC9wPjwvZGQ+Ci08L2RsPgotPC9kaXY+Ci08cD4KLSAgICAgICAgVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQotICAgICAgPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfb2Y8L3NwYW4+PC9jb2RlPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBMDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPls8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5dJmFtcDsuLi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBTjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPls8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5dJmFtcDtdKSZndDs6Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dHlwZTwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICAgIHdoZXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEFOPC9zcGFuPjwvY29kZT4gZGVub3RlIHRoZSBhcmd1bWVudCB0eXBlcyBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPi4KLSAgICAgIDwvcD4KLTxoNT4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmgzIj48L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmV4cHJlc3Npb25fc2VtYW50aWNzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmV4cHJlc3Npb25fc2VtYW50aWNzIj5FeHByZXNzaW9uCi0gICAgICAgIFNlbWFudGljczwvYT4KLSAgICAgIDwvaDU+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9InRhYmxlIj4KLTxjb2xncm91cD4KLTxjb2w+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0aGVhZD48dHI+Ci08dGg+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBFeHByZXNzaW9uCi0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RoPgotPHRoPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgU2VtYW50aWNzCi0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RoPgotPC90cj48L3RoZWFkPgotPHRib2R5PgotPHRyPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgPC90ZD4KLTx0ZD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYWRhcHRlciwgaW5pdGlhbGl6ZXMgdGhlIHRhcmdldCBmdW5jdGlvbiB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPi4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIGFkYXB0ZXIsIGF0dGVtcHRzIHRvIHVzZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4ncwotICAgICAgICAgICAgICAgICAgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L3RkPgotPHRkPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgY2FsbHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IHdpdGggd2l0aAotICAgICAgICAgICAgICAgICAgY29uc3QgYXJndW1lbnRzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+LiBJZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hSTwvc3Bhbj48L2NvZGU+Ci0gICAgICAgICAgICAgICAgICBpcyBhIHJlZmVyZW5jZSB3cmFwcGVyIGl0IGlzIHVud3JhcHBlZC4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08aDU+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oNCI+PC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5saW1pdHMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIubGltaXRzIj5MaW1pdHM8L2E+Ci0gICAgICA8L2g1PgotPHA+Ci0gICAgICAgIFRoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX0xJR0hUV0VJR0hUX0ZPUldBUkRfQURBUFRFUl9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQKLSAgICAgICAgdG8gc2V0IHRoZSBtYXhpbXVtIGNhbGwgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDEwLgotICAgICAgPC9wPgotPGg1PgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDUiPjwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuY29tcGxleGl0eSI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jb21wbGV4aXR5Ij5Db21wbGV4aXR5PC9hPgotICAgICAgPC9oNT4KLTxwPgotICAgICAgICBQcmVwcm9jZXNzaW5nIHRpbWU6IE8oTiksIHdoZXJlIE4gaXMgdGhlIGFyaXR5IGxpbWl0LiBDb21waWxlIHRpbWU6IE8oTiksCi0gICAgICAgIHdoZXJlIE4gaXMgdGhlIGVmZmVjdGl2ZSBhcml0eSBvZiBhIGNhbGwuIFJ1biB0aW1lOiBPKDApIGlmIHRoZSBjb21waWxlcgotICAgICAgICBpbmxpbmVzLCBPKDEpIG90aGVyd2lzZS4KLSAgICAgIDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYWNrbm93bGVkZ2VtZW50cyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5hY2tub3dsZWRnZW1lbnRzIiB0aXRsZT0iQWNrbm93bGVkZ2VtZW50cyI+QWNrbm93bGVkZ2VtZW50czwvYT4KLTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD4KLSAgICAgIEFzIHRoZXNlIHV0aWxpdGllcyBhcmUgZmFjdG9yZWQgb3V0IG9mIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1c2lvbi9kb2MvaHRtbC9pbmRleC5odG1sIiB0YXJnZXQ9Il90b3AiPkJvb3N0LkZ1c2lvbjwvYT4KLSAgICAgIGZ1bmN0aW9uYWwgbW9kdWxlLCBJIHdhbnQgdG8gdGhhbmsgRGFuIE1hcnNkZW4gYW5kIEpvZWwgZGUgR3V6bWFuIGZvciBsZXR0aW5nCi0gICAgICBtZSBwYXJ0aWNpcGF0ZSBpbiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhhdCBncmVhdCBsaWJyYXJ5IGluIHRoZSBmaXJzdCBwbGFjZS4KLSAgICA8L3A+Ci08cD4KLSAgICAgIEZ1cnRoZXIsIEkgd2FudCB0byBjcmVkaXQgdGhlIGF1dGhvcnMgb2YgdGhlIHJlZmVyZW5jZXMgYmVsb3csIGZvciB0aGVpciBpbi1kZXB0aAotICAgICAgaW52ZXN0aWdhdGlvbiBvZiB0aGUgcHJvYmxlbSBhbmQgdGhlIHNvbHV0aW9uIGltcGxlbWVudGVkIGhlcmUuCi0gICAgPC9wPgotPHA+Ci0gICAgICBMYXN0IGJ1dCBub3QgbGVhc3QgSSB3YW50IHRvIHRoYW5rIFZlc2EgS2Fybm92ZW4gYW5kIFBhdWwgTWVuc29uaWRlcyBmb3IgdGhlCi0gICAgICBCb29zdCBQcmVwcm9jZXNzb3IgbGlicmFyeS4gV2l0aG91dCBpdCwgSSB3b3VsZCBoYXZlIGVuZGVkIHVwIHdpdGggYW4gZXh0ZXJuYWwKLSAgICAgIGNvZGUgZ2VuZXJhdG9yIGZvciB0aGlzIG9uZS4KLSAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2VzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZXMiIHRpdGxlPSJSZWZlcmVuY2VzIj5SZWZlcmVuY2VzPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDIvbjEzODUuaHRtIiB0YXJnZXQ9Il90b3AiPlRoZQotICAgICAgICAgIEZvcndhcmRpbmcgUHJvYmxlbTwvYT4sIFBldGVyIERpbW92LCBIb3dhcmQgRS4gSGlubmFudCwgRGF2aWQgQWJyYWhhbXMsCi0gICAgICAgICAgMjAwMgotICAgICAgICA8L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZXN1bHRPZjwvYT4sCi0gICAgICAgICAgRG91Z2xhcyBHcmVnb3IsIDIwMDQKLSAgICAgICAgPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL3JlZi5odG1sIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlZjwvYT4sCi0gICAgICAgICAgSmFha2tvIEphcnZpLCBQZXRlciBEaW1vdiwgRG91Z2xhcyBHcmVnb3IsIERhdmlkIEFicmFoYW1zLCAxOTk5LTIwMDIKLSAgICAgICAgPC9saT4KLTwvb2w+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48cD48c21hbGw+TGFzdCByZXZpc2VkOiBOb3ZlbWJlciAwMSwgMjAwOCBhdCAxOTo1ODo1MCBHTVQ8L3NtYWxsPjwvcD48L3RkPgotPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+PC9kaXY+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0IGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2FmNzE2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWluZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODAzMDI5Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotICA8aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyBVUkw9ZG9jL2h0bWwvaW5kZXguaHRtbCI+Ci0gIDwvaGVhZD4KLSAgPGJvZHk+Ci0gICAgQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgY2xpY2sgdGhpcyAKLSAgICA8YSBocmVmPSJkb2MvaHRtbC9pbmRleC5odG1sIj5saW5rPC9hPiAmbmJzcDs8aHI+Ci0gICAgPHA+qSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlciwgMjAwOTwvcD4KLSAgICA8cD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgCi0gICAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij4KLSAgICBMSUNFTlNFXzFfMC50eHQ8L2E+IG9yIGNvcHkgYXQKLSAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3A+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvSmFtZmlsZSBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2OTQ1Ni4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0KLSMgKEMpIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyCi0jCi0jIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLSMgVmVyc2lvbiAxLjAuIChTZWUgaHR0cDovXC93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0KLWltcG9ydCB0ZXN0aW5nIDsKLQotcHJvamVjdCBmb3J3YXJkLXRlc3RzCi0gICAgOwotCi10ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvZm9yd2FyZAotICAgIDoKLSAgICAgIFsgcnVuIGZvcndhcmRfYWRhcHRlci5jcHAgXQotICAgICAgWyBydW4gbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcCBdCi0gICAgOwotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2ZvcndhcmRfYWRhcHRlci5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2ZvcndhcmRfYWRhcHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Y2M3OTYuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9mb3J3YXJkX2FkYXB0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBDb3B5cmlnaHQgKGMpIDIwMDcgVG9iaWFzIFNjaHdpbmdlcgotICAKLSAgICBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAotICAgIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotCi0jaWZkZWYgQk9PU1RfTVNWQwotIyAgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpIC8vIG5vIGNvbnZlcnNpb24gd2FybmluZ3MsIHBsZWFzZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mb3J3YXJkX2FkYXB0ZXIuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9ibGFuay5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvbm9uY29weWFibGUuaHBwPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi10ZW1wbGF0ZSA8Y2xhc3MgQmFzZSA9IG5kbmJvb3N0OjpibGFuaz4KLWNsYXNzIHRlc3RfZnVuYyA6IHB1YmxpYyBCYXNlIAotewotICAgIGludCB2YWw7Ci1wdWJsaWM6Ci0gICAgdGVzdF9mdW5jKGludCB2KSA6IHZhbCh2KSB7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEI+Ci0gICAgdGVzdF9mdW5jKHRlc3RfZnVuYzxCPiBjb25zdCAmIHRoYXQpCi0gICAgICA6IHZhbCh0aGF0LnZhbCkKLSAgICB7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEI+IGZyaWVuZCBjbGFzcyB0ZXN0X2Z1bmM7Ci0KLSAgICBpbnQgb3BlcmF0b3IoKShpbnQgJiBsLCBpbnQgY29uc3QgJiByKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGw9cit2YWw7Ci0gICAgfQotICAgIGxvbmcgb3BlcmF0b3IoKShpbnQgJiBsLCBpbnQgY29uc3QgJiByKSAKLSAgICB7Ci0gICAgICAgIHJldHVybiAtKGw9cit2YWwpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTaWc+Ci0gICAgc3RydWN0IHJlc3VsdAotICAgIHsKLSAgICAgICAgdHlwZWRlZiB2b2lkIHR5cGU7Ci0gICAgfTsKLQotICAgIC8vIGVuc3VyZSByZXN1bHRfb2YgYXJndW1lbnQgdHlwZXMgYXJlIHdoYXQncyBleHBlY3RlZAotICAgIC8vIG5vdGU6IHRoaXMgaXMgKm5vdCogaG93IGNsaWVudCBjb2RlIHNob3VsZCBsb29rIGxpa2UgCi0gICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+Ci0gICAgc3RydWN0IHJlc3VsdDwgU2VsZiBjb25zdChpbnQmLGludCBjb25zdCYpID4geyB0eXBlZGVmIGludCB0eXBlOyB9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+Ci0gICAgc3RydWN0IHJlc3VsdDwgU2VsZihpbnQmLGludCBjb25zdCYpID4geyB0eXBlZGVmIGxvbmcgdHlwZTsgfTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgotICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYoaW50JixpbnQmKSA+IHsgdHlwZWRlZiBjaGFyIHR5cGU7IH07Ci19OwotCi1lbnVtIHsgaW50XywgbG9uZ18sIGNoYXJfIH07Ci0KLWludCB0eXBlX29mKGludCkgIHsgcmV0dXJuIGludF87IH0KLWludCB0eXBlX29mKGxvbmcpIHsgcmV0dXJuIGxvbmdfOyB9Ci1pbnQgdHlwZV9vZihjaGFyKSB7IHJldHVybiBjaGFyXzsgfQotCi1pbnQgbWFpbigpCi17Ci0gICAgewotICAgICAgICB1c2luZyBuZG5ib29zdDo6aXNfc2FtZTsKLSAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OnJlc3VsdF9vZjsKLSAgICAgICAgdHlwZWRlZiBuZG5ib29zdDo6Zm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGY7Ci0KLSAgICAgICAgLy8gbHZhbHVlLHJ2YWx1ZQotICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKLSAgICAgICAgICAgIHJlc3VsdF9vZjwgZihpbnQmLCBpbnQpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7Ci0gICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAotICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChpbnQmLCBpbnQpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKLSAgICAgICAgLy8gbHZhbHVlLGNvbnN0IGx2YWx1ZQotICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKLSAgICAgICAgICAgIHJlc3VsdF9vZjwgZihpbnQmLCBpbnQgY29uc3QgJikgPjo6dHlwZSwgbG9uZyA+Ojp2YWx1ZSApKTsKLSAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8Ci0gICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKGludCYsIGludCBjb25zdCAmKSA+Ojp0eXBlLCBpbnQgPjo6dmFsdWUgKSk7Ci0gICAgICAgIC8vIGx2YWx1ZSxsdmFsdWUKLSAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8Ci0gICAgICAgICAgICByZXN1bHRfb2Y8IGYoaW50JiwgaW50JikgPjo6dHlwZSwgY2hhciA+Ojp2YWx1ZSApKTsKLSAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8Ci0gICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKGludCYsIGludCYpID46OnR5cGUsIGNoYXIgPjo6dmFsdWUgKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICB1c2luZyBuZG5ib29zdDo6bm9uY29weWFibGU7Ci0gICAgICAgIHVzaW5nIG5kbmJvb3N0Ojpmb3J3YXJkX2FkYXB0ZXI7Ci0KLSAgICAgICAgaW50IHggPSAwOwotICAgICAgICB0ZXN0X2Z1bmM8bm9uY29weWFibGU+IGYoNyk7Ci0gICAgICAgIGZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBmdW5jKGYpOwotICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzxub25jb3B5YWJsZT4gJiA+IGZ1bmNfcmVmKGYpOwotICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzxub25jb3B5YWJsZT4gJiA+IGNvbnN0IGZ1bmNfcmVmX2MoZik7Ci0gICAgICAgIGZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gY29uc3QgPiBmdW5jX2MoZik7Ci0gICAgICAgIGZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBjb25zdCBmdW5jX2MyKGYpOwotICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzxub25jb3B5YWJsZT4gY29uc3QgJiA+IGZ1bmNfY19yZWYoZik7Ci0KLSAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuYyh4LDEpICkgPT0gbG9uZ18gKTsKLSAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19yZWYoeCwxKSApID09IGxvbmdfICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfcmVmX2MoeCwxKSApID09IGxvbmdfICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfYyh4LDEpICkgPT0gaW50XyApOwotICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2MyKHgsMSkgKSA9PSBpbnRfICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfY19yZWYoeCwxKSApID09IGludF8gKTsKLSAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuYyh4LHgpICkgPT0gY2hhcl8gKTsKLQotICAgICAgICBCT09TVF9URVNUKCBmdW5jKHgsMSkgPT0gLTggKTsKLSAgICAgICAgQk9PU1RfVEVTVCggZnVuY19yZWYoeCwxKSA9PSAtOCApOwotICAgICAgICBCT09TVF9URVNUKCBmdW5jX3JlZl9jKHgsMSkgPT0gLTggKTsKLSAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jKHgsMSkgPT0gOCApOwotICAgICAgICBCT09TVF9URVNUKCBmdW5jX2MyKHgsMSkgPT0gOCApOwotICAgICAgICBCT09TVF9URVNUKCBmdW5jX2NfcmVmKHgsMSkgPT0gOCApOwotICAgIH0KLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQotCi0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFlMjA3ZS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIENvcHlyaWdodCAoYykgMjAwNyBUb2JpYXMgU2Nod2luZ2VyCi0gIAotICAgIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCi0gICAgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkgLy8gbm8gY29udmVyc2lvbiB3YXJuaW5ncywgcGxlYXNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L2JsYW5rLmhwcD4KLSNpbmNsdWRlIDxib29zdC9ub25jb3B5YWJsZS5ocHA+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLXRlbXBsYXRlIDxjbGFzcyBCYXNlID0gbmRuYm9vc3Q6OmJsYW5rPgotY2xhc3MgdGVzdF9mdW5jIDogcHVibGljIEJhc2UgCi17Ci0gICAgaW50IHZhbDsKLXB1YmxpYzoKLSAgICB0ZXN0X2Z1bmMoaW50IHYpIDogdmFsKHYpIHsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgQj4KLSAgICB0ZXN0X2Z1bmModGVzdF9mdW5jPEI+IGNvbnN0ICYgdGhhdCkKLSAgICAgIDogdmFsKHRoYXQudmFsKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgQj4gZnJpZW5kIGNsYXNzIHRlc3RfZnVuYzsKLQotICAgIGludCBvcGVyYXRvcigpKGludCAmIGwsIGludCBjb25zdCAmIHIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbD1yK3ZhbDsKLSAgICB9Ci0gICAgbG9uZyBvcGVyYXRvcigpKGludCAmIGwsIGludCBjb25zdCAmIHIpIAotICAgIHsKLSAgICAgICAgcmV0dXJuIC0obD1yK3ZhbCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNpZz4KLSAgICBzdHJ1Y3QgcmVzdWx0Ci0gICAgewotICAgICAgICB0eXBlZGVmIHZvaWQgdHlwZTsKLSAgICB9OwotCi0gICAgLy8gZW5zdXJlIHJlc3VsdF9vZiBhcmd1bWVudCB0eXBlcyBhcmUgd2hhdCdzIGV4cGVjdGVkCi0gICAgLy8gbm90ZTogdGhpcyBpcyAqbm90KiBob3cgY2xpZW50IGNvZGUgc2hvdWxkIGxvb2sgbGlrZSAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KLSAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmIGNvbnN0KGludCYsaW50IGNvbnN0JikgPiB7IHR5cGVkZWYgaW50IHR5cGU7IH07Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KLSAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmKGludCYsaW50IGNvbnN0JikgPiB7IHR5cGVkZWYgbG9uZyB0eXBlOyB9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+Ci0gICAgc3RydWN0IHJlc3VsdDwgU2VsZihpbnQmLGludCYpID4geyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsKLX07Ci0KLWVudW0geyBpbnRfLCBsb25nXywgY2hhcl8gfTsKLQotaW50IHR5cGVfb2YoaW50KSAgeyByZXR1cm4gaW50XzsgfQotaW50IHR5cGVfb2YobG9uZykgeyByZXR1cm4gbG9uZ187IH0KLWludCB0eXBlX29mKGNoYXIpIHsgcmV0dXJuIGNoYXJfOyB9Ci0KLWludCBtYWluKCkKLXsKLSAgICB7Ci0gICAgICAgIHVzaW5nIG5kbmJvb3N0Ojppc19zYW1lOwotICAgICAgICB1c2luZyBuZG5ib29zdDo6cmVzdWx0X29mOwotICAgICAgICB0eXBlZGVmIG5kbmJvb3N0OjpsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gZjsKLSAgICAgICAgdHlwZWRlZiBuZG5ib29zdDo6cmVmZXJlbmNlX3dyYXBwZXI8aW50PiByZWY7Ci0gICAgICAgIHR5cGVkZWYgbmRuYm9vc3Q6OnJlZmVyZW5jZV93cmFwcGVyPGludCBjb25zdD4gY3JlZjsKLQotICAgICAgICAvLyBsdmFsdWUscnZhbHVlCi0gICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAotICAgICAgICAgICAgcmVzdWx0X29mPCBmKHJlZiwgaW50KSA+Ojp0eXBlLCBsb25nID46OnZhbHVlICkpOwotICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKLSAgICAgICAgICAgIHJlc3VsdF9vZjwgZiBjb25zdCAocmVmLCBpbnQpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKLSAgICAgICAgLy8gbHZhbHVlLGNvbnN0IGx2YWx1ZQotICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKLSAgICAgICAgICAgIHJlc3VsdF9vZjwgZihyZWYsIGNyZWYpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7Ci0gICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAotICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChyZWYsIGNyZWYpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKLSAgICAgICAgLy8gbHZhbHVlLGx2YWx1ZQotICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKLSAgICAgICAgICAgIHJlc3VsdF9vZjwgZihyZWYsIHJlZikgPjo6dHlwZSwgY2hhciA+Ojp2YWx1ZSApKTsKLSAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8Ci0gICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKHJlZiwgcmVmKSA+Ojp0eXBlLCBjaGFyID46OnZhbHVlICkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIHVzaW5nIG5kbmJvb3N0Ojpub25jb3B5YWJsZTsKLSAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjsKLQotICAgICAgICBpbnQgdiA9IDA7IG5kbmJvb3N0OjpyZWZlcmVuY2Vfd3JhcHBlcjxpbnQ+IHgodik7Ci0gICAgICAgIHRlc3RfZnVuYzxub25jb3B5YWJsZT4gZig3KTsKLSAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGZ1bmMoZik7Ci0gICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiAmID4gZnVuY19yZWYoZik7Ci0gICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiAmID4gY29uc3QgZnVuY19yZWZfYyhmKTsKLSAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiBjb25zdCA+IGZ1bmNfYyhmKTsKLSAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGNvbnN0IGZ1bmNfYzIoZik7Ci0gICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiBjb25zdCAmID4gZnVuY19jX3JlZihmKTsKLQotICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jKHgsMSkgKSA9PSBsb25nXyApOwotICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX3JlZih4LDEpICkgPT0gbG9uZ18gKTsKLSAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19yZWZfYyh4LDEpICkgPT0gbG9uZ18gKTsKLSAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jKHgsMSkgKSA9PSBpbnRfICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfYzIoeCwxKSApID09IGludF8gKTsKLSAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jX3JlZih4LDEpICkgPT0gaW50XyApOwotICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jKHgseCkgKSA9PSBjaGFyXyApOwotCi0gICAgICAgIEJPT1NUX1RFU1QoIGZ1bmMoeCwxKSA9PSAtOCApOwotICAgICAgICBCT09TVF9URVNUKCBmdW5jX3JlZih4LDEpID09IC04ICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfcmVmX2MoeCwxKSA9PSAtOCApOwotICAgICAgICBCT09TVF9URVNUKCBmdW5jX2MoeCwxKSA9PSA4ICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfYzIoeCwxKSA9PSA4ICk7Ci0gICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfY19yZWYoeCwxKSA9PSA4ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90cmFpdHMuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90cmFpdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBjZTUxMC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvZnVuY3Rpb25fdHJhaXRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuLXVzIj4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiPgotCi0gIDx0aXRsZT5Cb29zdCBGdW5jdGlvbiBPYmplY3QgQWRhcHRlciBMaWJyYXJ5PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+Ci0gIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiMwMDdGN0YiIGNlbGxwYWRkaW5nPSIyIiBzdW1tYXJ5PSIiPgotICAgIDx0cj4KLSAgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9Ci0gICAgICAiYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+SG9tZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uL2xpYnJhcmllcy5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkxpYnJhcmllczwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9wZW9wbGUuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5QZW9wbGU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9tb3JlL2ZhcS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkZBUTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL21vcmUvaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5Nb3JlPC9iaWc+PC9mb250PjwvYT48L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0KLSAgPGgxPkZ1bmN0aW9uIE9iamVjdCBUcmFpdHM8L2gxPgotCi0gIDxwPlRoZSBoZWFkZXIgPGEgaHJlZj0iLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC5ocHAiPmZ1bmN0aW9uYWwuaHBwPC9hPgotICBwcm92aWRlcyB0d28gdHJhaXRzIGNsYXNzIHRlbXBsYXRlcyBmb3IgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbiBvYmplY3RzOjwvcD4KLQotICA8dGFibGUgYm9yZGVyPSIxIiBzdW1tYXJ5PSIiPgotICAgIDx0cj4KLSAgICAgIDx0aD5UeXBlPC90aD4KLQotICAgICAgPHRoPkNvbnRlbnRzPC90aD4KLQotICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0idG9wIiByb3dzcGFuPSI0Ij4KLSAgICAgIDx0dD50ZW1wbGF0ZSZuYnNwOyZsdDt0eXBlbmFtZSZuYnNwO1QmZ3Q7PGJyPgotICAgICAgc3RydWN0Jm5ic3A7dW5hcnlfdHJhaXRzPC90dD48L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5mdW5jdGlvbl90eXBlPC90dD48L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbiBvYmplY3QgaXRzZWxmCi0gICAgICAoaS5lLiwgPHR0PlQ8L3R0PikuPC90ZD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+cGFyYW1fdHlwZTwvdHQ+PC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHBhc3MgdGhlIGZ1bmN0aW9uIG9yCi0gICAgICBmdW5jdGlvbiBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuPC90ZD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+cmVzdWx0X3R5cGU8L3R0PjwvdGQ+Ci0KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uCi0gICAgICBvYmplY3QuPC90ZD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+YXJndW1lbnRfdHlwZTwvdHQ+PC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uCi0gICAgICBvYmplY3QuPC90ZD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0idG9wIiByb3dzcGFuPSI1Ij4KLSAgICAgIDx0dD50ZW1wbGF0ZSZuYnNwOyZsdDt0eXBlbmFtZSZuYnNwO1QmZ3Q7PGJyPgotICAgICAgc3RydWN0Jm5ic3A7YmluYXJ5X3RyYWl0czwvdHQ+PC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+ZnVuY3Rpb25fdHlwZTwvdHQ+PC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZgotICAgICAgKGkuZS4sIDx0dD5UPC90dD4pLjwvdGQ+Ci0gICAgPC90cj4KLQotICAgIDx0cj4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnBhcmFtX3R5cGU8L3R0PjwvdGQ+Ci0KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBwYXNzIHRoZSBmdW5jdGlvbiBvcgotICAgICAgZnVuY3Rpb24gb2JqZWN0IGFzIGEgcGFyYW1ldGVyLjwvdGQ+Ci0gICAgPC90cj4KLQotICAgIDx0cj4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnJlc3VsdF90eXBlPC90dD48L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbgotICAgICAgb2JqZWN0LjwvdGQ+Ci0gICAgPC90cj4KLQotICAgIDx0cj4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PmZpcnN0X2FyZ3VtZW50X3R5cGU8L3R0PjwvdGQ+Ci0KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBvcgotICAgICAgZnVuY3Rpb24gb2JqZWN0LjwvdGQ+Ci0gICAgPC90cj4KLQotICAgIDx0cj4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnNlY29uZF9hcmd1bWVudF90eXBlPC90dD48L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uIG9yCi0gICAgICBmdW5jdGlvbiBvYmplY3QuPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDxoMz5Vc2FnZTwvaDM+Ci0KLSAgPHA+PHR0PnVuYXJ5X3RyYWl0czwvdHQ+IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBlaXRoZXIgYSBmdW5jdGlvbgotICB0YWtpbmcgYSBzaW5nbGUgcGFyYW1ldGVyLCBvciBhbiBhZGFwdGFibGUgdW5hcnkgZnVuY3Rpb24gb2JqZWN0IChpLmUuLCBhCi0gIGNsYXNzIGRlcml2ZWQgZnJvbSA8dHQ+c3RkOjp1bmFyeV9mdW5jdGlvbjwvdHQ+IG9yIG9uZSB3aGljaCBwcm92aWRlcyB0aGUKLSAgc2FtZSB0eXBlZGVmcykuIChTZWUgJnNlY3Q7MjAuMy4xIGluIHRoZSBDKysgU3RhbmRhcmQuKTwvcD4KLQotICA8cD48dHQ+YmluYXJ5X3RyYWl0czwvdHQ+IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBlaXRoZXIgYSBmdW5jdGlvbgotICB0YWtpbmcgdHdvIHBhcmFtZXRlcnMsIG9yIGFuIGFkYXB0YWJsZSBiaW5hcnkgZnVuY3Rpb24gb2JqZWN0IChpLmUuLCBhCi0gIGNsYXNzIGRlcml2ZWQgZnJvbSA8dHQ+c3RkOjpiaW5hcnlfZnVuY3Rpb248L3R0PiBvciBvbmUgd2hpY2ggcHJvdmlkZXMgdGhlCi0gIHNhbWUgdHlwZWRlZnMpLiAoU2VlICZzZWN0OzIwLjMuMSBpbiB0aGUgQysrIFN0YW5kYXJkLik8L3A+Ci0KLSAgPHA+VGhlIG1vc3QgY29tbW9uIHVzYWdlIG9mIHRoZXNlIHRlbXBsYXRlcyBpcyBpbiBmdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMsCi0gIHRodXMgYWxsb3dpbmcgdGhlbSB0byBhZGFwdCBwbGFpbiBmdW5jdGlvbnMgYXMgd2VsbCBhcyBmdW5jdGlvbiBvYmplY3RzLgotICBZb3UgY2FuIGRvIHRoaXMgYnkgd2hlcmV2ZXIgeW91IHdvdWxkIG5vcm1hbGx5IHdyaXRlLCBmb3IgZXhhbXBsZSw8L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLXR5cGVuYW1lIE9wZXJhdGlvbjo6YXJndW1lbnRfdHlwZQotPC9wcmU+Ci0gIDwvYmxvY2txdW90ZT4KLQotICA8cD5zaW1wbHkgd3JpdGluZzwvcD4KLQotICA8YmxvY2txdW90ZT4KLSAgICA8cHJlPgotdHlwZW5hbWUgYm9vc3Q6OnVuYXJ5X3RyYWl0cyZsdDtPcGVyYXRpb24mZ3Q7Ojphcmd1bWVudF90eXBlCi08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPmluc3RlYWQuPC9wPgotCi0gIDxoMz5BZGRpdGlvbmFsIFR5cGVzIERlZmluZWQ8L2gzPgotCi0gIDxwPkluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCByZXN1bHQgYW5kIGFyZ3VtZW50IHR5cGVkZWZzLCB0aGVzZSB0cmFpdHMKLSAgdGVtcGxhdGVzIGRlZmluZSB0d28gYWRkaXRpb25hbCB0eXBlcy48L3A+Ci0KLSAgPGg0Pjx0dD5mdW5jdGlvbl90eXBlPC90dD48L2g0PgotCi0gIDxwPlRoaXMgaXMgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIG9iamVjdCwgYW5kIGNhbiBiZSB1c2VkIGluCi0gIGRlY2xhcmF0aW9ucyBzdWNoIGFzPC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci10ZW1wbGF0ZSAmbHQ7Y2xhc3MgUHJlZGljYXRlJmd0OwotY2xhc3MgdW5hcnlfbmVnYXRlIDogLy8gLi4uCi17Ci0gIC8vIC4uLgotICBwcml2YXRlOgotICAgIDxzdHJvbmc+dHlwZW5hbWUgdW5hcnlfdHJhaXRzJmx0O1ByZWRpY2F0ZSZndDs6OmZ1bmN0aW9uX3R5cGU8L3N0cm9uZz4gcHJlZDsKLX07Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPklmIHRoaXMgdHlwZWRlZiB3ZXJlIG5vdCBwcm92aWRlZCwgaXQgd291bGQgbm90IGJlIHBvc3NpYmxlIHRvIGRlY2xhcmUKLSAgPHR0PnByZWQ8L3R0PiBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IDx0dD51bmFyeV9uZWdhdGU8L3R0PiB0byBiZQotICBpbnN0YW50aWF0ZWQgd2l0aCBhIGZ1bmN0aW9uIHR5cGUgKHNlZSB0aGUgQysrIFN0YW5kYXJkICZzZWN0OzE0LjMuMQotICAmcGFyYTszKS48L3A+Ci0KLSAgPGg0Pjx0dD5wYXJhbV90eXBlPC90dD48L2g0PgotCi0gIDxwPlRoaXMgaXMgYSB0eXBlIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbiBvYmplY3QgYXMgYQotICBwYXJhbWV0ZXIgdG8gYW5vdGhlciBmdW5jdGlvbi4gRm9yIGV4YW1wbGUsPC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci10ZW1wbGF0ZSAmbHQ7Y2xhc3MgUHJlZGljYXRlJmd0OwotY2xhc3MgdW5hcnlfbmVnYXRlIDogLy8gLi4uCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoPHN0cm9uZz50eXBlbmFtZSB1bmFyeV90cmFpdHMmbHQ7UHJlZGljYXRlJmd0Ozo6cGFyYW1fdHlwZTwvc3Ryb25nPiB4KQotICAgICAgICA6Ci0gICAgICAgIHByZWQoeCkKLSAgICB7fQotICAgIC8vIC4uLgotfTsKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+RnVuY3Rpb24gb2JqZWN0cyBhcmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byBjb25zdDsgZnVuY3Rpb24gcG9pbnRlcnMgYXJlCi0gIHBhc3NlZCBieSB2YWx1ZS48L3A+Ci0KLSAgPGgzPkxpbWl0YXRpb25zPC9oMz4KLQotICA8cD5UaGlzIGxpYnJhcnkgdXNlcyB0aGVzZSB0cmFpdHMgd2l0aGluIGFsbCBmdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMsCi0gIHRoZW9yZXRpY2FsbHkgcmVuZGVyaW5nIDx0dD5wdHJfZnVuPC90dD4gb2Jzb2xldGUuIEhvd2V2ZXIsIHRoaXJkIHBhcnR5Ci0gIGFkYXB0ZXJzIHByb2JhYmx5IHdvbid0IHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbWVjaGFuaXNtLCBhbmQgc28KLSAgPHR0PnB0cl9mdW48L3R0PiBtYXkgc3RpbGwgYmUgcmVxdWlyZWQuIEFjY29yZGluZ2x5LCB0aGlzIGxpYnJhcnkgYWxzbwotICBwcm92aWRlcyA8YSBocmVmPSJwdHJfZnVuLmh0bWwiPmltcHJvdmVkIHZlcnNpb25zIG9mIHRoZSBzdGFuZGFyZCBmdW5jdGlvbgotICBwb2ludGVyIGFkYXB0ZXJzPC9hPi48L3A+Ci0KLSAgPHA+VGhlc2UgdHJhaXRzIHRlbXBsYXRlcyB3aWxsIGFsc28gbm90IHdvcmsgd2l0aCBjb21waWxlcnMgdGhhdCBmYWlsIHRvCi0gIHN1cHBvcnQgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiBvZiB0ZW1wbGF0ZXMuIFdpdGggdGhlc2UgY29tcGlsZXJzLCB0aGUKLSAgdHJhaXRzIHRlbXBsYXRlcyBjYW4gb25seSBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhZGFwdGFibGUgZnVuY3Rpb24gb2JqZWN0cywKLSAgdGh1cyByZXF1aXJpbmcgPHR0PnB0cl9mdW48L3R0PiB0byBiZSB1c2VkLCBldmVuIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdAotICBhZGFwdGVycyBpbiB0aGlzIGxpYnJhcnkuPC9wPgotICA8aHI+Ci0KLSAgPHA+PGEgaHJlZj0iaHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPXJlZmVyZXIiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Ci0gICIuLi8uLi9kb2MvaW1hZ2VzL3ZhbGlkLWh0bWw0MDEucG5nIiBhbHQ9IlZhbGlkIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwiCi0gIGhlaWdodD0iMzEiIHdpZHRoPSI4OCI+PC9hPjwvcD4KLQotICA8cD5SZXZpc2VkIAotICA8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBzLXR5cGU9IkVESVRFRCIgcy1mb3JtYXQ9IiVkICVCLCAlWSIgc3RhcnRzcGFuIC0tPjAyCi0gIERlY2VtYmVyLCAyMDA2PCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgZW5kc3BhbiBpLWNoZWNrc3VtPSIzODUxMCIgLS0+PC9wPgotCi0gIDxwPjxpPkNvcHlyaWdodCAmY29weTsgMjAwMCBDYWRlbnphIE5ldyBaZWFsYW5kIEx0ZC48L2k+PC9wPgotCi0gIDxwPjxpPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKLSAgY29weSBhdCA8YSBocmVmPQotICAiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvaT48L3A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9KYW1maWxlLnYyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmUyNzk4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9KYW1maWxlLnYyCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotCi0jIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgotIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0jIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi11c2luZyBib29zdGJvb2sgOwotdXNpbmcgcXVpY2tib29rIDsKLQoteG1sIGhhc2ggOiBoYXNoLnFiayA7Ci1ib29zdGJvb2sgc3RhbmRhbG9uZSA6IGhhc2ggOgotICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgotCi0gICAgPHhzbDpwYXJhbT5jaHVuay5maXJzdC5zZWN0aW9ucz0xCi0gICAgPHhzbDpwYXJhbT5jaHVuay5zZWN0aW9uLmRlcHRoPTIKLSAgICA8eHNsOnBhcmFtPmdlbmVyYXRlLnNlY3Rpb24udG9jLmxldmVsPTIKLSAgICA8eHNsOnBhcmFtPnRvYy5zZWN0aW9uLmRlcHRoPTEKLSAgICA8eHNsOnBhcmFtPnRvYy5tYXguZGVwdGg9MQotICAgIDxmb3JtYXQ+cGRmOjx4c2w6cGFyYW0+Ym9vc3QudXJsLnByZWZpeD1odHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy9yZWxlYXNlL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9odG1sCi0gICAgOwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2NoYW5nZXMucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2NoYW5nZXMucWJrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2EwODE0Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9jaGFuZ2VzLnFiaworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0KLVsvIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgotIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KLQotW3NlY3Rpb246Y2hhbmdlcyBDaGFuZ2UgTG9nXQotCi1baDIgQm9vc3QgMS4zMy4wXQotCi0qIEluaXRpYWwgUmVsZWFzZQotCi1baDIgQm9vc3QgMS4zMy4xXQotCi0qIEZpeGVkIHRoZSBwb2ludHMgZXhhbXBsZSwgYXMgcG9pbnRlZCBvdXQgYnkg5rKI5oWn5bOwLgotCi1baDIgQm9vc3QgMS4zNC4wXQotCi0qIFVzZSBkZWNsYXJhdGlvbnMgZm9yIHN0YW5kYXJkIGNsYXNzZXMsIHNvIHRoYXQgdGhlIGxpYnJhcnkKLSAgZG9lc24ndCBuZWVkIHRvIGluY2x1ZGUgYWxsIG9mIHRoZWlyIGhlYWRlcnMKLSogRGVwcmVjYXRlZCB0aGUgYDxib29zdC9mdW5jdGlvbmFsL2hhc2gvKi5ocHA+YCBoZWFkZXJzLiBOb3cgYSBzaW5nbGUgaGVhZGVyLAotICA8W2hlYWRlcnJlZiBib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwXT4gaXMgdXNlZC4KLSogQWRkIHN1cHBvcnQgZm9yIHRoZSBgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TYCBtYWNybywgd2hpY2gKLSAgZGlzYWJsZXMgdGhlIGV4dGVuc2lvbnMgdG8gVFIxLgotCi0qIE1pbm9yIGltcHJvdmVtZW50cyB0byB0aGUgaGFzaCBmdW5jdGlvbnMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCi0qIFVwZGF0ZSB0aGUgcG9ydGFibGUgZXhhbXBsZSB0byBob3BlZnVsbHkgYmUgbW9yZSBnZW5lcmFsbHkgcG9ydGFibGUuCi0KLVtoMiBCb29zdCAxLjM0LjFdCi0KLSogW0BodHRwOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC85NTIgVGlja2V0IDk1Ml06Ci0gIFN1cHByZXNzIGluY29ycmVjdCA2NC1iaXQgd2FybmluZyBvbiBWaXN1YWwgQysrLgotCi1baDIgQm9vc3QgMS4zNS4wXQotCi0qIFN1cHBvcnQgZm9yIGBsb25nIGxvbmdgLCBgc3RkOjpjb21wbGV4YC4KLSogSW1wcm92ZWQgYWxnb3JpdGhtIGZvciBoYXNoaW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnM6Ci0gICogSW1wcm92ZWQgcG9ydGFibGl0eSwgYXMgZGVzY3JpYmVkIGJ5IERhbmllbCBLcsO8Z2xlciBpbgotICAgIFtAaHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9ib29zdC11c2Vycy8yMDA1LzA4LzEzNDE4LnBocAotICAgIGEgcG9zdCB0byB0aGUgYm9vc3QgdXNlcnMgbGlzdF0uCi0gICogRml0cyBtb3JlIGluZm9ybWF0aW9uIGludG8gZWFjaCBjb21iaW5lIGxvb3AsIHdoaWNoIGNhbiByZWR1Y2UgdGhlCi0gICAgdGhlIG51bWJlciBvZiB0aW1lcyBjb21iaW5lIGlzIGNhbGxlZCBhbmQgaG9wZWZ1bGx5IGdpdmUgYSBiZXR0ZXIKLSAgICBxdWFsaXR5IGhhc2ggZnVuY3Rpb24uCi0gICogSW1wcm92ZWQgdGhlIGFsZ29yaXRobSBmb3IgaGFzaGluZyBmbG9hdGluZyBwb2ludCBudW1iZXJzLgotICAqIE9uIEN5Z3dpbiB1c2UgYSBiaW5hcnkgaGFzaCBmdW5jdGlvbiBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYXMgCi0gICAgQ3lnd2luIGRvZXNuJ3QgaGF2ZSBkZWNlbnQgZmxvYXRpbmcgcG9pbnQgZnVuY3Rpb25zIGZvciBgbG9uZyBkb3VibGVgLgotICAqIE5ldmVyIHVzZXMgYGZwY2xhc3NgIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgbG9uZyBkb3VibGVgLgotICAqIFtAaHR0cDovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMTA2NCBUaWNrZXQgMTA2NF06Ci0gICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSB1c2Ugb2YgYGVycm5vYC4KLSogRXhwbGljaXRseSBvdmVybG9hZCBmb3IgbW9yZSBidWlsdCBpbiB0eXBlcy4KLSogTWlub3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBkb2N1bWVudGF0aW9uLgotKiBBIGZldyBidWcgYW5kIHdhcm5pbmcgZml4ZXM6Ci0gICogW0BodHRwOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xNTA5IFRpY2tldCAxNTA5XToKLSAgICBTdXBwcmVzcyBhbm90aGVyIFZpc3VhbCBDKysgd2FybmluZy4KLSAgKiBTb21lIHdvcmthcm91bmRzIGZvciB0aGUgU3VuIGNvbXBpbGVycy4KLQotW2gyIEJvb3N0IDEuMzYuMF0KLQotKiBTdG9wIHVzaW5nIE9wZW5CU0QncyBkb2RneSBgc3RkOjpudW1lcmljX2xpbWl0c2AuCi0qIFVzaW5nIHRoZSBib29zdCB0eXBlZGVmcyBmb3IgYGxvbmcgbG9uZ2AgYW5kIGB1bnNpZ25lZCBsb25nIGxvbmdgLgotKiBNb3ZlIHRoZSBleHRlbnNpb25zIGludG8gdGhlaXIgb3duIGhlYWRlci4KLQotW2gyIEJvb3N0IDEuMzcuMF0KLQotKiBbQGh0dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzIyNjQgVGlja2V0IDIyNjRdOgotICBJbiBWaXN1YWwgQysrLCBhbHdheXMgdXNlIEM5OSBmbG9hdCBmdW5jdGlvbnMgZm9yIGBsb25nIGRvdWJsZWAgYW5kIGBmbG9hdGAgYXMKLSAgdGhlIEMrKyBvdmVybG9hZHMgYXJlbid0IGFsd2F5cyBhdmFpbGFibGVzLgotCi1baDIgQm9vc3QgMS4zOC4wXQotCi0qIENoYW5nZWQgdGhlIHdhcm5pbmdzIGluIHRoZSBkZXByZWNhdGVkIGhlYWRlcnMgZnJvbSAxLjM0LjAgdG8gZXJyb3JzLiBUaGVzZQotICB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBCb29zdC4KLSogTW92ZWQgZGV0YWlsIGhlYWRlcnMgb3V0IG9mIGBib29zdC9mdW5jdGlvbmFsL2RldGFpbGAsIHNpbmNlIHRoZXkgYXJlIHBhcnQgb2YKLSAgZnVuY3Rpb25hbC9oYXNoLCBub3QgZnVuY3Rpb25hbC4gYGJvb3N0L2Z1bmN0aW9uYWwvZGV0YWlsL2NvbnRhaW5lcl9md2QuaHBwYAotICBoYXMgYmVlbiBtb3ZlZCB0byBgYm9vc3QvZGV0YWlsL2NvbnRhaW5lcl9md2QuaHBwYCBhcyBpdCdzIHVzZWQgb3V0c2lkZSBvZgotICB0aGlzIGxpYnJhcnksIHRoZSBvdGhlcnMgaGF2ZSBiZWVuIG1vdmVkIHRvIGBib29zdC9mdW5jdGlvbmFsL2hhc2gvZGV0YWlsYC4KLSAgCi1baDIgQm9vc3QgMS4zOS4wXQotCi0qIE1vdmUgdGhlIGhhc2hfZndkLmhwcCBpbXBsZW1lbnRhdGlvbiBpbnRvIHRoZSBoYXNoIHN1YmRpcmVjdG9yeSwgbGVhdmluZyBhCi0gIGZvcndhcmRpbmcgaGVhZGVyIGluIHRoZSBvbGQgbG9jYXRpb24uIFlvdSBzaG91bGQgc3RpbGwgdXNlIHRoZSBvbGQgbG9jYXRpb24sCi0gIHRoZSBuZXcgbG9jYXRpb24gaXMgbWFpbmx5IGZvciBpbXBsZW1lbnRhdGlvbiBhbmQgcG9zc2libGUgbW9kdWxhcml6YXRpb24uCi0qIFtAaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzI0MTIgVGlja2V0IDI0MTJdOiBSZW1vdmVkIGRlcHJlY2F0ZWQKLSAgaGVhZGVycy4KLSogW0BodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMjk1NyBUaWNrZXQgMjk1N106IEZpeCBjb25maWd1cmF0aW9uCi0gIGZvciB2eHdvcmtzLgotCi1baDIgQm9vc3QgMS40MC4wXQotCi0qIEF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHRoZSBmbG9hdCBmdW5jdGlvbnMgdXNpbmcgdGVtcGxhdGUgbWV0YXByb2dyYW1taW5nCi0gIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNvbmZpZ3VyZSBldmVyeSBwb3NzaWJpbGl0eSBtYW51YWxseS4KLSogV29ya2Fyb3VuZCBmb3Igd2hlbiBTVExwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBsb25nIGRvdWJsZS4KLQotW2gyIEJvb3N0IDEuNDIuMF0KLQotKiBSZWR1Y2UgdGhlIG51bWJlciBvZiB3YXJuaW5ncyBmb3IgVmlzdWFsIEMrKyB3YXJuaW5nIGxldmVsIDQuCi0qIFNvbWUgY29kZSBmb3JtYXR0aW5nIGNoYW5nZXMgdG8gZml0IGxpbmVzIGludG8gODAgY2hhcmFjdGVycy4KLSogUmVuYW1lIGFuIGludGVybmFsIG5hbWVzcGFjZS4KLQotW2gyIEJvb3N0IDEuNDMuMF0KLQotKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8zODY2IFRpY2tldCAzODY2XToKLSAgRG9uJ3QgZm93YXJkIGRlY2xhcmUgY29udGFpbmVycyB3aGVuIHVzaW5nIGdjYydzIHBhcmFsbGVsIGxpYnJhcnksCi0gIGFsbG93IHVzZXIgdG8gc3RvcCBmb3J3YXJkIGRlY2xhcmF0aW9uIGJ5IGRlZmluaW5nIHRoZQotICBgQk9PU1RfREVUQUlMX05PX0NPTlRBSU5FUl9GV0RgIG1hY3JvLgotKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC80MDM4IFRpY2tldCA0MDM4XToKLSAgQXZvaWQgaGFzaGluZyAwLjUgYW5kIDAgdG8gdGhlIHNhbWUgbnVtYmVyLgotKiBTdG9wIHVzaW5nIGRlcHJlY2F0ZWQgYEJPT1NUX0hBU18qYCBtYWNyb3MuCi0KLVtoMiBCb29zdCAxLjQ0LjBdCi0KLSogQWRkIG9wdGlvbiB0byBwcmV2ZW50IGltcGxpY2l0IGNvbnZlcnNpb25zIHdoZW4gY2FsbGluZyBgaGFzaF92YWx1ZWAgYnkKLSAgZGVmaW5pbmcgYEJPT1NUX0hBU0hfTk9fSU1QTElDSVRfQ0FTVFNgLiBXaGVuIHVzaW5nIGBib29zdDo6aGFzaGAKLSAgZm9yIGEgdHlwZSB0aGF0IGRvZXMgbm90IGhhdmUgYGhhc2hfdmFsdWVgIGRlY2xhcmVkIGJ1dCBkb2VzIGhhdmUKLSAgYW4gaW1wbGljaXQgY29udmVyc2lvbiB0byBhIHR5cGUgdGhhdCBkb2VzLCBpdCB3b3VsZCB1c2UgdGhhdAotICBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGhhc2ggaXQuIFdoaWNoIGNhbiBzb21ldGltZXMgZ28gdmVyeSB3cm9uZywKLSAgZS5nLiB1c2luZyBhIGNvbnZlcnNpb24gdG8gYm9vbCBhbmQgb25seSBoYXNoaW5nIHRvIDIgcG9zc2libGUKLSAgdmFsdWVzLiBTaW5jZSBmaXhpbmcgdGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSBhbmQgd2FzIG9ubHkKLSAgYXBwcm9hY2hlZCBxdWl0ZSBsYXRlIGluIHRoZSByZWxlYXNlIGN5Y2xlIHdpdGggbGl0dGxlIGRpc2N1c3Npb24KLSAgaXQncyBvcHQtaW4gZm9yIG5vdy4gVGhpcywgb3Igc29tZXRoaW5nIGxpa2UgaXQsIHdpbGwgYmVjb21lIHRoZQotICBkZWZhdWx0IGluIGEgZnV0dXJlIHZlcnNpb24uCi0KLVtoMiBCb29zdCAxLjQ2LjBdCi0KLSogQXZvaWQgd2FybmluZyBkdWUgd2l0aCBnY2MncyBgLVdjb252ZXJzaW9uYCBmbGFnLgotCi1baDIgQm9vc3QgMS41MC4wXQotCi0qIFtAaHR0cDovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvNjc3MSBUaWNrZXQgNjc3MV06Ci0gIEF2b2lkIGdjYydzIGAtV2Zsb2F0LWVxdWFsYCB3YXJuaW5nLgotKiBbQGh0dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzY4MDYgVGlja2V0IDY4MDZdOgotICBTdXBwb3J0IGBzdGQ6OmFycmF5YCBhbmQgYHN0ZDo6dHVwbGVgIHdoZW4gYXZhaWxhYmxlLgotKiBBZGQgZGVwcmVjYXRpb24gd2FybmluZyB0byB0aGUgbG9uZyBkZXByZWNhdGVkCi0gIGBib29zdC9mdW5jdGlvbmFsL2RldGFpbC9jb250YWluZXJfZndkLmhwcGAuCi0KLVtoMiBCb29zdCAxLjUxLjBdCi0KLSogU3VwcG9ydCB0aGUgc3RhbmRhcmQgc21hcnQgcG9pbnRlcnMuCi0qIGBoYXNoX3ZhbHVlYCBub3cgaW1wbGVtZW50ZWQgdXNpbmcgU0ZJTkFFIHRvIGF2b2lkIGltcGxpY2l0IGNhc3RzIHRvIGJ1aWx0Ci0gIGluIHR5cGVzIHdoZW4gY2FsbGluZyBpdC4KLSogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBjb25maWcgbWFjcm9zLgotCi1baDIgQm9vc3QgMS41Mi4wXQotCi0qIFJlc3RvcmUgYGVudW1gIHN1cHBvcnQsIHdoaWNoIHdhcyBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiB0aGUgbGFzdCB2ZXJzaW9uLgotKiBOZXcgZmxvYXRpbmcgcG9pbnQgaGFzaGVyIC0gd2lsbCBoYXNoIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb24gbW9yZQotICBwbGF0Zm9ybXMsIHdoaWNoIHNob3VsZCBiZSBmYXN0ZXIuCi0KLVtoMiBCb29zdCAxLjUzLjBdCi0KLSogQWRkIHN1cHBvcnQgZm9yIGBib29zdDo6aW50MTI4X3R5cGVgIGFuZCBgYm9vc3Q6OnVpbnQxMjhfdHlwZWAgd2hlcmUKLSAgYXZhaWxhYmxlIC0gY3VycmVudGx5IG9ubHkgYF9faW50MTI4YCBhbmQgYHVuc2lnbmVkIF9faW50MTI4YCBvbiBzb21lCi0gIHZlcnNpb25zIG9mIGdjYy4KLSogT24gcGxhdGZvcm1zIHRoYXQgYXJlIGtub3duIHRvIGhhdmUgdGhlIHN0YW5kYXJkIGZsb2F0aW5nIHBvaW50IGZ1bmN0aW9ucywKLSAgZG9uJ3QgdXNlIGF1dG9tYXRpYyBkZXRlY3Rpb24gLSB3aGljaCBjYW4gYnJlYWsgaWYgdGhlcmUgYXJlIGFtYmlndW91cwotICBvdmVybG9hZHMuCi0qIEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIHdoZW4gdXNpbmcgdGhlIGJpbmFyeSBmbG9hdCBoYXNoIChUaG9tYXMgSGVsbGVyKS4KLQotW2gyIEJvb3N0IDEuNTQuMF0KLQotKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC83OTU3IFRpY2tldCA3OTU3XToKLSAgRml4ZWQgYSB0eXBvLgotCi1bZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9kaXNhYmxlLnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9kaXNhYmxlLnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkZWM2Yi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvZGlzYWJsZS5xYmsKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0KLVsvIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgotIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KLQotW3NlY3Rpb246ZGlzYWJsZSBEaXNhYmxpbmcgVGhlIEV4dGVuc2lvbnNdCi0KLVdoaWxlIFtjbGFzc3JlZiBib29zdDo6aGFzaF0ncyBleHRlbnNpb25zIGFyZSBnZW5lcmFsbHkgdXNlZnVsLCB5b3UgbWlnaHQgd2FudAotdG8gdHVybiB0aGVtIG9mIGluIG9yZGVyIHRvIGNoZWNrIHRoYXQgeW91ciBjb2RlIHdpbGwgd29yayB3aXRoIG90aGVyCi1pbXBsZW1lbnRhdGlvbnMgb2YgVFIxLiBUbyBkbyB0aGlzIGRlZmluZSB0aGUgbWFjcm8gYEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OU2AuCi1XaGVuIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgb25seSB0aGUgc3BlY2lhbGlzYXRpb25zIGRldGFpbGVkCi1pbiBUUjEgd2lsbCBiZSBkZWNsYXJlZC4gQnV0LCBpZiB5b3UgbGF0ZXIgdW5kZWZpbmUgdGhlIG1hY3JvIGFuZCBpbmNsdWRlCi08W2hlYWRlcnJlZiBib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwXT4gdGhlbiB0aGUgbm9uLXNwZWNpYWxpc2VkIGZvcm0gd2lsbCBiZSBkZWZpbmVkCi0tIGFjdGl2YXRpbmcgdGhlIGV4dGVuc2lvbnMuCi0KLUl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IG5ldmVyIHVuZGVmaW5lIHRoZSBtYWNybyAtIGFuZCBvbmx5IGRlZmluZQotaXQgc28gdGhhdCBpdCBhcHBsaWVzIHRvIHRoZSBjb21wbGV0ZSB0cmFuc2xhdGlvbiB1bml0LCBlaXRoZXIgYnkgZGVmaW5pbmcgaXQKLWF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gc291cmNlIGZpbGUgb3IsIHByZWZlcmFibHksIGJ5IHVzaW5nIGEgY29tcGlsZXIKLXN3aXRjaCBvciBwcmVmZXJlbmNlLiBBbmQgeW91IHJlYWxseSBzaG91bGQgbmV2ZXIgZGVmaW5lIGl0IGluIGhlYWRlciBmaWxlcy4KLQotSWYgeW91IGFyZSB3cml0aW5nIGEgbGlicmFyeSB3aGljaCBoYXMgY29kZSBpbiB0aGUgaGVhZGVyIHdoaWNoIHJlcXVpcmVzIHRoZQotZXh0ZW5zaW9ucywgdGhlbiB0aGUgYmVzdCBhY3Rpb24gaXMgdG8gdGVsbCB1c2VycyBub3QgdG8gZGVmaW5lIHRoZSBtYWNyby4KLVRoZWlyIGNvZGUgd29uJ3QgWydyZXF1aXJlXSB0aGUgbWFjcm8uCi0KLVRyYW5zbGF0aW9uIHVuaXRzIHRoYXQgYXJlIGNvbXBpbGVkIHdpdGggdGhlIG1hY3JvIGRlZmluZWQgd2lsbCBsaW5rIHdpdGggdW5pdHMKLXRoYXQgd2VyZSBjb21waWxlZCB3aXRob3V0IGl0LiBUaGlzIGZlYXR1cmUgaGFzIGJlZW4gZGVzaWduZWQgdG8gYXZvaWQgT0RSCi12aW9sYXRpb25zLgotCi1bZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9oYXNoLnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9oYXNoLnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RiNzJkNC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaGFzaC5xYmsKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1bbGlicmFyeSBCb29zdC5GdW5jdGlvbmFsL0hhc2gKLSAgICBbcXVpY2tib29rIDEuNV0KLSAgICBbYXV0aG9ycyBbSmFtZXMsIERhbmllbF1dCi0gICAgW2NvcHlyaWdodCAyMDA1IDIwMDYgMjAwNyAyMDA4IERhbmllbCBKYW1lc10KLSAgICBbcHVycG9zZSBBIFRSMSBoYXNoIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbiBiZSBleHRlbmRlZCB0byBoYXNoIHVzZXIKLSAgICAgICAgZGVmaW5lZCB0eXBlc10KLSAgICBbY2F0ZWdvcnkgaGlnaGVyLW9yZGVyXQotICAgIFtpZCBoYXNoXQotICAgIFtkaXJuYW1lIGZ1bmN0aW9uYWwvaGFzaF0KLSAgICBbbGljZW5zZQotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0gICAgICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHRdKQotICAgIF0KLV0KLQotW2RlZiBfX2lzc3Vlc19fCi0gICAgW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM3LnBkZgotICAgIExpYnJhcnkgRXh0ZW5zaW9uIFRlY2huaWNhbCBSZXBvcnQgSXNzdWVzIExpc3RdXQotCi1baW5jbHVkZTpoYXNoIGludHJvLnFia10KLVtpbmNsdWRlOmhhc2ggdHV0b3JpYWwucWJrXQotW2luY2x1ZGU6aGFzaCBwb3J0YWJpbGl0eS5xYmtdCi1baW5jbHVkZTpoYXNoIGRpc2FibGUucWJrXQotW2luY2x1ZGU6aGFzaCBjaGFuZ2VzLnFia10KLVtpbmNsdWRlOmhhc2ggcmF0aW9uYWxlLnFia10KLVt4aW5jbHVkZSByZWYueG1sXQotW2luY2x1ZGU6aGFzaCBsaW5rcy5xYmtdCi1baW5jbHVkZTpoYXNoIHRoYW5rcy5xYmtdCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaW50cm8ucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2ludHJvLnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc2ZTk5Ny4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaW50cm8ucWJrCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotCi1bLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KLSAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCi0KLVtzZWN0aW9uOmludHJvIEludHJvZHVjdGlvbl0KLQotW2RlZiBfX3RyMS1mdWxsX18KLSAgICBbQGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzYucGRmCi0gICAgRHJhZnQgVGVjaG5pY2FsIFJlcG9ydCBvbiBDKysgTGlicmFyeSBFeHRlbnNpb25zXV0KLVtkZWYgX190cjFfXwotICAgIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGYKLSAgICBUUjFdXQotW2RlZiBfX3Vub3JkZXJlZF9fIFtsaW5rIHVub3JkZXJlZCBCb29zdC5Vbm9yZGVyZWRdXQotW2RlZiBfX2ludHJ1c2l2ZV9fIFtsaW5rIGludHJ1c2l2ZS51bm9yZGVyZWRfc2V0X3Vub3JkZXJlZF9tdWx0aXNldCBCb29zdC5JbnRydXNpdmVdXQotW2RlZiBfX211bHRpLWluZGV4X18gW0Bib29zdDovbGlicy9tdWx0aV9pbmRleC9kb2MvaW5kZXguaHRtbAotICAgIEJvb3N0IE11bHRpLUluZGV4IENvbnRhaW5lcnMgTGlicmFyeV1dCi1bZGVmIF9fbXVsdGktaW5kZXgtc2hvcnRfXyBbQGJvb3N0Oi9saWJzL211bHRpX2luZGV4L2RvYy9pbmRleC5odG1sCi0gICAgQm9vc3QuTXVsdGlJbmRleF1dCi1bZGVmIF9fYmltYXBfXyBbQGJvb3N0Oi9saWJzL2JpbWFwL2luZGV4Lmh0bWwgQm9vc3QuQmltYXBdXQotW2RlZiBfX2hhc2gtZnVuY3Rpb25fXyBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFzaF9mdW5jdGlvbiBoYXNoIGZ1bmN0aW9uXV0KLVtkZWYgX19oYXNoLXRhYmxlX18gW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhc2hfdGFibGUgaGFzaCB0YWJsZV1dCi0KLVtjbGFzc3JlZiBib29zdDo6aGFzaF0gaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIF9faGFzaC1mdW5jdGlvbl9fIG9iamVjdAotc3BlY2lmaWVkIGJ5IHRoZSBfX3RyMS1mdWxsX18gKFRSMSkuIEl0IGlzIHRoZSBkZWZhdWx0IGhhc2ggZnVuY3Rpb24gZm9yCi1fX3Vub3JkZXJlZF9fLCBfX2ludHJ1c2l2ZV9fJ3MgdW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIGFuZAotX19tdWx0aS1pbmRleC1zaG9ydF9fJ3MgaGFzaCBpbmRpY2llcyBhbmQgX19iaW1hcF9fJ3MgYHVub3JkZXJlZF9zZXRfb2ZgLgotCi1BcyBpdCBpcyBjb21wbGlhbnQgd2l0aCBfX3RyMV9fLCBpdCB3aWxsIHdvcmsgd2l0aDoKLQotKiBpbnRlZ2VycwotKiBmbG9hdHMKLSogcG9pbnRlcnMKLSogc3RyaW5ncwotCi1JdCBhbHNvIGltcGxlbWVudHMgdGhlIGV4dGVuc2lvbiBwcm9wb3NlZCBieSBQZXRlciBEaW1vdiBpbiBpc3N1ZSA2LjE4IG9mIHRoZQotX19pc3N1ZXNfXyAocGFnZSA2MyksIHRoaXMgYWRkcyBzdXBwb3J0IGZvcjoKLQotKiBhcnJheXMKLSogYHN0ZDo6cGFpcmAKLSogdGhlIHN0YW5kYXJkIGNvbnRhaW5lcnMuCi0qIGV4dGVuZGluZyBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdIGZvciBjdXN0b20gdHlwZXMuCi0KLVtub3RlCi1UaGlzIGhhc2ggZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBpbiBjb250YWluZXJzIGJhc2VkIG9uCi10aGUgU1RMIGFuZCBpcyBub3Qgc3VpdGFibGUgYXMgYSBnZW5lcmFsIHB1cnBvc2UgaGFzaCBmdW5jdGlvbi4KLUZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBbbGluayBoYXNoLnJhdGlvbmFsZSByYXRpb25hbGVdLgotXQotCi0KLVtlbmRzZWN0XQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvbGlua3MucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2xpbmtzLnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1NTM2ZS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvbGlua3MucWJrCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotCi1bLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KLSAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCi0KLVtzZWN0aW9uOmxpbmtzIExpbmtzXQotCi1bKkEgUHJvcG9zYWwgdG8gQWRkIEhhc2ggVGFibGVzIHRvIHRoZSBTdGFuZGFyZCBMaWJyYXJ5XQotW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9KVEMxL1NDMjIvV0cyMS9kb2NzL3BhcGVycy8yMDAzL24xNDU2Lmh0bWxdCi1UaGUgaGFzaCB0YWJsZSBwcm9wb3NhbCBleHBsYWlucyBtdWNoIG9mIHRoZSBkZXNpZ24uIFRoZSBoYXNoIGZ1bmN0aW9uIG9iamVjdAotaXMgZGlzY3Vzc2VkIGluIFNlY3Rpb24gRC4KLQotWypUaGUgQysrIFN0YW5kYXJkIExpYnJhcnkgVGVjaG5pY2FsIFJlcG9ydC5dCi1bQGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzYucGRmXQotQ29udGFpbnMgdGhlIGhhc2ggZnVuY3Rpb24gc3BlY2lmaWNhdGlvbiBpbiBzZWN0aW9uIDYuMy4yLgotCi1bKkxpYnJhcnkgRXh0ZW5zaW9uIFRlY2huaWNhbCBSZXBvcnQgSXNzdWVzIExpc3QuXQotW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM3LnBkZl0KLVRoZSBsaWJyYXJ5IGltcGxlbWVudHMgdGhlIGV4dGVuc2lvbiBkZXNjcmliZWQgaW4gSXNzdWUgNi4xOCwgcGFnZXMgNjMtNjcuCi0KLVsqTWV0aG9kcyBmb3IgSWRlbnRpZnlpbmcgVmVyc2lvbmVkIGFuZCBQbGFnaWFyaXNlZCBEb2N1bWVudHNdCi1UaW1vdGh5IEMuIEhvYWQsIEp1c3RpbiBab2JlbAotW0BodHRwOi8vd3d3LmNzLnJtaXQuZWR1LmF1L35qei9mdWxsdGV4dC9qYXNpc3QtdGNoLnBkZl0KLUNvbnRhaW5zIHRoZSBoYXNoIGZ1bmN0aW9uIHRoYXQgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfY29tYmluZV0gaXMgYmFzZWQgb24uCi0KLVtlbmRzZWN0XQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcG9ydGFiaWxpdHkucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3BvcnRhYmlsaXR5LnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1YmMxOS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcG9ydGFiaWxpdHkucWJrCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotCi1bLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KLSAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCi0KLVtzZWN0aW9uOnBvcnRhYmlsaXR5IFBvcnRhYmlsaXR5XQotCi1bZGVmIF9fYm9vc3RfaGFzaF9fIFtjbGFzc3JlZiBib29zdDo6aGFzaF1dCi0KLV9fYm9vc3RfaGFzaF9fIGlzIHdyaXR0ZW4gdG8gYmUgYXMgcG9ydGFibGUgYXMgcG9zc2libGUsIGJ1dCB1bmZvcnR1bmF0ZWx5LCBzZXZlcmFsCi1vbGRlciBjb21waWxlcnMgZG9uJ3Qgc3VwcG9ydCBhcmd1bWVudCBkZXBlbmRlbnQgbG9va3VwIChBREwpIC0gdGhlIG1lY2hhbmlzbQotdXNlZCBmb3IgY3VzdG9taXNhdGlvbi4gIE9uIHRob3NlIGNvbXBpbGVycyBjdXN0b20gb3ZlcmxvYWRzIGZvciBgaGFzaF92YWx1ZWAKLW5lZWRzIHRvIGJlIGRlY2xhcmVkIGluIHRoZSBib29zdCBuYW1lc3BhY2UuCi0KLU9uIGEgc3RyaWN0bHkgc3RhbmRhcmRzIGNvbXBsaWFudCBjb21waWxlciwgYW4gb3ZlcmxvYWQgZGVmaW5lZCBpbiB0aGUKLWJvb3N0IG5hbWVzcGFjZSB3b24ndCBiZSBmb3VuZCB3aGVuIF9fYm9vc3RfaGFzaF9fIGlzIGluc3RhbnRpYXRlZCwKLXNvIGZvciB0aGVzZSBjb21waWxlcnMgdGhlIG92ZXJsb2FkIHNob3VsZCBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBzYW1lCi1uYW1lc3BhY2UgYXMgdGhlIGNsYXNzLgotCi1MZXQncyBzYXkgd2UgaGF2ZSBhIHNpbXBsZSBjdXN0b20gdHlwZToKLQotICAgIG5hbWVzcGFjZSBmb28KLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICBjbGFzcyBjdXN0b21fdHlwZQotICAgICAgICB7Ci0gICAgICAgICAgICBUIHZhbHVlOwotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBjdXN0b21fdHlwZShUIHgpIDogdmFsdWUoeCkge30KLQotICAgICAgICAgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tX3R5cGUgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfX2Jvb3N0X2hhc2hfXzxpbnQ+IGhhc2hlcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGVyKHgudmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotT24gYSBjb21wbGlhbnQgY29tcGlsZXIsIHdoZW4gYGhhc2hfdmFsdWVgIGlzIGNhbGxlZCBmb3IgdGhpcyB0eXBlLAotaXQgd2lsbCBsb29rIGF0IHRoZSBuYW1lc3BhY2UgaW5zaWRlIHRoZSB0eXBlIGFuZCBmaW5kIGBoYXNoX3ZhbHVlYAotYnV0IG9uIGEgY29tcGlsZXIgd2hpY2ggZG9lc24ndCBzdXBwb3J0IEFETCBgaGFzaF92YWx1ZWAgd29uJ3QgYmUgZm91bmQuCi1UbyBtYWtlIHRoaW5ncyB3b3JzZSwgc29tZSBjb21waWxlcnMgd2hpY2ggZG8gc3VwcG9ydCBBREwgd29uJ3QgZmluZAotYSBmcmllbmQgY2xhc3MgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzLgotCi1TbyBmaXJzdCBtb3ZlIHRoZSBtZW1iZXIgZnVuY3Rpb24gb3V0IG9mIHRoZSBjbGFzczoKLQotICAgIG5hbWVzcGFjZSBmb28KLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICBjbGFzcyBjdXN0b21fdHlwZQotICAgICAgICB7Ci0gICAgICAgICAgICBUIHZhbHVlOwotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBjdXN0b21fdHlwZShUIHgpIDogdmFsdWUoeCkge30KLQotICAgICAgICAgICAgc3RkOjpzaXplX3QgaGFzaChjdXN0b21fdHlwZSB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9fYm9vc3RfaGFzaF9fPFQ+IGhhc2hlcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGVyKHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICAgICAgaW5saW5lIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tX3R5cGU8VD4geCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHguaGFzaCgpOwotICAgICAgICB9Ci0gICAgfQotCi1VbmZvcnR1bmF0ZWx5LCBJIGNvdWxkbid0IGRlY2xhcmUgaGFzaF92YWx1ZSBhcyBhIGZyaWVuZCwgYXMgc29tZSBjb21waWxlcnMKLWRvbid0IHN1cHBvcnQgdGVtcGxhdGUgZnJpZW5kcywgc28gaW5zdGVhZCBJIGRlY2xhcmVkIGEgbWVtYmVyIGZ1bmN0aW9uIHRvCi1jYWxjdWxhdGUgdGhlIGhhc2gsIGFuZCBjYWxsZWQgaXQgZnJvbSBoYXNoX3ZhbHVlLgotCi1Gb3IgY29tcGlsZXJzIHdoaWNoIGRvbid0IHN1cHBvcnQgQURMLCBoYXNoX3ZhbHVlIG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlCi1ib29zdCBuYW1lc3BhY2U6Ci0KLSAgICAjaWZkZWYgQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUAotICAgIG5hbWVzcGFjZSBib29zdAotICAgICNlbHNlCi0gICAgbmFtZXNwYWNlIGZvbwotICAgICNlbmRpZgotICAgIHsKLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoZm9vOjpjdXN0b21fdHlwZTxUPiB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geC5oYXNoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLUZ1bGwgY29kZSBmb3IgdGhpcyBleGFtcGxlIGlzIGF0Ci1bQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHAgL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvcnRhYmxlLmNwcF0uCi0KLVtlbmRzZWN0XQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JhdGlvbmFsZS5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcmF0aW9uYWxlLnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYyMTA4MS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcmF0aW9uYWxlLnFiaworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLQotWy8gQ29weXJpZ2h0IDIwMTEgRGFuaWVsIEphbWVzLgotIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KLQotW3NlY3Rpb246cmF0aW9uYWxlIFJhdGlvbmFsZV0KLQotVGhlIHJhdGlvbmFsZSBjYW4gYmUgZm91bmQgaW4gdGhlIG9yaWdpbmFsIGRlc2lnbgotW2Zvb3Rub3RlIGlzc3VlIDYuMTggb2YgdGhlIF9faXNzdWVzX18gKHBhZ2UgNjMpXS4KLQotW2hlYWRpbmcgUXVhbGl0eSBvZiB0aGUgaGFzaCBmdW5jdGlvbl0KLQotTWFueSBoYXNoIGZ1bmN0aW9ucyBzdHJpdmUgdG8gaGF2ZSBsaXR0bGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgaW5wdXQKLWFuZCBvdXRwdXQgdmFsdWVzLiBUaGV5IGF0dGVtcHQgdG8gdW5pZm9ybWFsbHkgZGlzdHJpYnV0ZSB0aGUgb3V0cHV0Ci12YWx1ZXMgZm9yIHZlcnkgc2ltaWxhciBpbnB1dHMuIFRoaXMgaGFzaCBmdW5jdGlvbiBtYWtlcyBubyBzdWNoCi1hdHRlbXB0LiBJbiBmYWN0LCBmb3IgaW50ZWdlcnMsIHRoZSByZXN1bHQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gaXMgb2Z0ZW4KLWp1c3QgdGhlIGlucHV0IHZhbHVlLiBTbyBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgaW5wdXQgdmFsdWVzIHdpbGwgb2Z0ZW4KLXJlc3VsdCBpbiBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgb3V0cHV0IHZhbHVlcy4KLVRoaXMgbWVhbnMgdGhhdCBpdCBpcyBub3QgYXBwcm9wcmlhdGUgYXMgYSBnZW5lcmFsIGhhc2ggZnVuY3Rpb24uIEZvcgotZXhhbXBsZSwgYSBoYXNoIHRhYmxlIG1heSBkaXNjYXJkIGJpdHMgZnJvbSB0aGUgaGFzaCBmdW5jdGlvbiByZXN1bHRpbmcKLWluIGxpa2VseSBjb2xsaXNpb25zLCBvciBtaWdodCBoYXZlIHBvb3IgY29sbGlzaW9uIHJlc29sdXRpb24gd2hlbiBoYXNoCi12YWx1ZXMgYXJlIGNsdXN0ZXJlZCB0b2dldGhlci4gSW4gc3VjaCBjYXNlcyB0aGlzIGhhc2ggZnVuY3Rpb24gd2lsbAotcHJlZm9ybSBwb29ybHkuCi0KLUJ1dCB0aGUgc3RhbmRhcmQgaGFzIG5vIHN1Y2ggcmVxdWlyZW1lbnQgZm9yIHRoZSBoYXNoIGZ1bmN0aW9uLAotaXQganVzdCByZXF1aXJlcyB0aGF0IHRoZSBoYXNoZXMgb2YgdHdvIGRpZmZlcmVudCB2YWx1ZXMgYXJlIHVubGlrZWx5Ci10byBjb2xsaWRlLiBDb250YWluZXJzIG9yIGFsZ29yaXRobXMKLWRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgc3RhbmRhcmQgaGFzaCBmdW5jdGlvbiB3aWxsIGhhdmUgdG8gYmUKLWltcGxlbWVudGVkIHRvIHdvcmsgd2VsbCB3aGVuIHRoZSBoYXNoIGZ1bmN0aW9uJ3Mgb3V0cHV0IGlzIGNvcnJlbGF0ZWQKLXRvIGl0cyBpbnB1dC4gU2luY2UgdGhleSBhcmUgcGF5aW5nIHRoYXQgY29zdCBhIGhpZ2hlciBxdWFsaXR5IGhhc2ggZnVuY3Rpb24KLXdvdWxkIGJlIHdhc3RlZnVsLgotCi1Gb3Igb3RoZXIgdXNlIGNhc2VzLCBpZiB5b3UgZG8gbmVlZCBhIGhpZ2hlciBxdWFsaXR5IGhhc2ggZnVuY3Rpb24sCi10aGVuIG5laXRoZXIgdGhlIHN0YW5kYXJkIGhhc2ggZnVuY3Rpb24gb3IgYGJvb3N0OjpoYXNoYCBhcmUgYXBwcm9wcmlhdGUuCi1UaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zCi1hdmFpbGFibGUuIE9uZSBpcyB0byB1c2UgYSBzZWNvbmQgaGFzaCBvbiB0aGUgb3V0cHV0IG9mIHRoaXMgaGFzaAotZnVuY3Rpb24sIHN1Y2ggYXMgW0BodHRwOi8vd3d3LmNvbmNlbnRyaWMubmV0L350dHdhbmcvdGVjaC9pbnRoYXNoLmh0bQotVGhvbWFzIFdhbmcncyBoYXNoIGZ1bmN0aW9uXS4gVGhpcyB0aGlzIG1heSBub3Qgd29yayBhcwotd2VsbCBhcyBhIGhhc2ggYWxnb3JpdGhtIHRhaWxvcmVkIGZvciB0aGUgaW5wdXQuCi0KLUZvciBzdHJpbmdzIHRoZXJlIGFyZSBzZXZlcmFsIGZhc3QsIGhpZ2ggcXVhbGl0eSBoYXNoIGZ1bmN0aW9ucwotYXZhaWxhYmxlIChmb3IgZXhhbXBsZSBbQGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zbWhhc2hlci8gTXVybXVySGFzaDNdCi1hbmQgW0BodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2l0eWhhc2gvIEdvb2dsZSdzIENpdHlIYXNoXSksCi1hbHRob3VnaCB0aGV5IHRlbmQgdG8gYmUgbW9yZSBtYWNoaW5lIHNwZWNpZmljLgotVGhlc2UgbWF5IGFsc28gYmUgYXBwcm9wcmlhdGUgZm9yIGhhc2hpbmcgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YKLXlvdXIgZGF0YSAtIHByb3ZpZGluZyB0aGF0IGFsbCBlcXVhbCB2YWx1ZXMgaGF2ZSBhbiBlcXVhbAotcmVwcmVzZW50YXRpb24sIHdoaWNoIGlzIG5vdCBhbHdheXMgdGhlIGNhc2UgKGUuZy4gZm9yIGZsb2F0aW5nIHBvaW50Ci12YWx1ZXMpLgotCi1bZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9yZWYueG1sIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JlZi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YzQyN2MuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JlZi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ODMgKzAsMCBAQAotCi08IS0tCi1Db3B5cmlnaHQgRGFuaWVsIEphbWVzIDIwMDUtMjAwOQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0tLT4KLQotPGxpYnJhcnktcmVmZXJlbmNlPgotICA8c2VjdGlvbiBpZD0iaGFzaC5yZWZlcmVuY2Uuc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHBhcmE+Rm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb24sIHNlZSBzZWN0aW9uIDYuMyBvZiB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGYiPkMrKyBTdGFuZGFyZCBMaWJyYXJ5IFRlY2huaWNhbCBSZXBvcnQ8L3VsaW5rPgotICAgICAgICBhbmQgaXNzdWUgNi4xOCBvZiB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNy5wZGYiPkxpYnJhcnkgRXh0ZW5zaW9uIFRlY2huaWNhbCBSZXBvcnQgSXNzdWVzIExpc3Q8L3VsaW5rPiAocGFnZSA2MykuCi0gICAgPC9wYXJhPgotICA8L3NlY3Rpb24+Ci0gIDxoZWFkZXIgbmFtZT0iYm9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcCI+Ci0gICAgPHBhcmE+Ci0gICAgICBEZWZpbmVzIDxjb2RlPjxjbGFzc25hbWU+Ym9vc3Q6Omhhc2g8L2NsYXNzbmFtZT48L2NvZGU+LAotICAgICAgYW5kIGhlbHBlciBmdW5jdGlvbnMuCi0gICAgPC9wYXJhPgotCi0gICAgPG5hbWVzcGFjZSBuYW1lPSJib29zdCI+Ci0KLSAgICAgIDwhLS0KLSAgICAgICAgYm9vc3Q6Omhhc2gKLSAgICAgICAgLS0+Ci0KLSAgICAgIDxzdHJ1Y3QgbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICA8L3RlbXBsYXRlPgotCi0gICAgICAgIDxpbmhlcml0IGFjY2Vzcz0icHVibGljIj4KLSAgICAgICAgICA8Y2xhc3NuYW1lPnN0ZDo6dW5hcnlfZnVuY3Rpb24mbHQ7VCwgc3RkOjpzaXplX3QmZ3Q7PC9jbGFzc25hbWU+Ci0gICAgICAgIDwvaW5oZXJpdD4KLQotICAgICAgICA8cHVycG9zZT48c2ltcGFyYT5BIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzYucGRmIj5UUjE8L3VsaW5rPiBjb21wbGlhbnQgaGFzaCBmdW5jdGlvbiBvYmplY3QuPC9zaW1wYXJhPjwvcHVycG9zZT4KLQotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5UIGNvbnN0JmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cmV0dXJucz48cGFyYT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9wYXJhPjwvcmV0dXJucz4KLSAgICAgICAgICA8bm90ZXM+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgVGhlIGNhbGwgdG8gPGNvZGU+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+PC9jb2RlPgotICAgICAgICAgICAgICBpcyB1bnF1YWxpZmllZCwgc28gdGhhdCBjdXN0b20gb3ZlcmxvYWRzIGNhbiBiZQotICAgICAgICAgICAgICBmb3VuZCB2aWEgYXJndW1lbnQgZGVwZW5kZW50IGxvb2t1cC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICBUaGlzIGlzIG5vdCBkZWZpbmVkIHdoZW4gdGhlIG1hY3JvIDxjb2RlPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUzwvY29kZT4KLSAgICAgICAgICAgICAgaXMgZGVmaW5lZC4gVGhlIHNwZWNpYWxpemF0aW9ucyBhcmUgc3RpbGwgZGVmaW5lZCwgc28gb25seSB0aGUgc3BlY2lhbGl6YXRpb25zCi0gICAgICAgICAgICAgIHJlcXVpcmVkIGJ5IFRSMSBhcmUgZGVmaW5lZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICBGb3J3YXJkIGRlY2xhcmVkIGluCi0gICAgICAgICAgICAgIDxjb2RlPiZsdDtib29zdC9mdW5jdGlvbmFsL2hhc2hfZndkLmhwcCZndDs8L2NvZGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgPC9ub3Rlcz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPgotICAgICAgICAgICAgT25seSB0aHJvd3MgaWYKLSAgICAgICAgICAgIDxjb2RlPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPihUKTwvY29kZT4gdGhyb3dzLgotICAgICAgICAgIDwvcGFyYT48L3Rocm93cz4KLSAgICAgICAgPC9tZXRob2Q+Ci0gICAgICA8L3N0cnVjdD4KLQotICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KLSAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+Ci0gICAgICAgIDxzcGVjaWFsaXphdGlvbj4KLSAgICAgICAgICA8dGVtcGxhdGUtYXJnPmJvb2w8L3RlbXBsYXRlLWFyZz4KLSAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KLSAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KLSAgICAgICAgICAgIDxwYXJhbXR5cGU+Ym9vbDwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+Y2hhcjwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5jaGFyPC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz5zaWduZWQgY2hhcjwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5zaWduZWQgY2hhcjwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+dW5zaWduZWQgY2hhcjwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT51bnNpZ25lZCBjaGFyPC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz53Y2hhcl90PC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPndjaGFyX3Q8L3BhcmFtdHlwZT4KLSAgICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cmV0dXJucz4KLSAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+Ci0gICAgICAgICAgPC9yZXR1cm5zPgotICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KLSAgICAgICAgPC9tZXRob2Q+Ci0gICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KLQotICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KLSAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+Ci0gICAgICAgIDxzcGVjaWFsaXphdGlvbj4KLSAgICAgICAgICA8dGVtcGxhdGUtYXJnPnNob3J0PC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPnNob3J0PC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz51bnNpZ25lZCBzaG9ydDwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT51bnNpZ25lZCBzaG9ydDwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+aW50PC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPmludDwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+dW5zaWduZWQgaW50PC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPnVuc2lnbmVkIGludDwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+bG9uZzwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5sb25nPC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz51bnNpZ25lZCBsb25nPC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPnVuc2lnbmVkIGxvbmc8L3BhcmFtdHlwZT4KLSAgICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cmV0dXJucz4KLSAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+Ci0gICAgICAgICAgPC9yZXR1cm5zPgotICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KLSAgICAgICAgPC9tZXRob2Q+Ci0gICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KLQotICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KLSAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+Ci0gICAgICAgIDxzcGVjaWFsaXphdGlvbj4KLSAgICAgICAgICA8dGVtcGxhdGUtYXJnPmxvbmcgbG9uZzwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5sb25nIGxvbmc8L3BhcmFtdHlwZT4KLSAgICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cmV0dXJucz4KLSAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+Ci0gICAgICAgICAgPC9yZXR1cm5zPgotICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KLSAgICAgICAgPC9tZXRob2Q+Ci0gICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KLQotICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KLSAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+Ci0gICAgICAgIDxzcGVjaWFsaXphdGlvbj4KLSAgICAgICAgICA8dGVtcGxhdGUtYXJnPnVuc2lnbmVkIGxvbmcgbG9uZzwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT51bnNpZ25lZCBsb25nIGxvbmc8L3BhcmFtdHlwZT4KLSAgICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cmV0dXJucz4KLSAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+Ci0gICAgICAgICAgPC9yZXR1cm5zPgotICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KLSAgICAgICAgPC9tZXRob2Q+Ci0gICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KLQotICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KLSAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+Ci0gICAgICAgIDxzcGVjaWFsaXphdGlvbj4KLSAgICAgICAgICA8dGVtcGxhdGUtYXJnPmZsb2F0PC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPmZsb2F0PC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz5kb3VibGU8L3RlbXBsYXRlLWFyZz4KLSAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KLSAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KLSAgICAgICAgICAgIDxwYXJhbXR5cGU+ZG91YmxlPC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz5sb25nIGRvdWJsZTwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5sb25nIGRvdWJsZTwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+c3RkOjpzdHJpbmc8L3RlbXBsYXRlLWFyZz4KLSAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KLSAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KLSAgICAgICAgICAgIDxwYXJhbXR5cGU+c3RkOjpzdHJpbmcgY29uc3QmYW1wOzwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+c3RkOjp3c3RyaW5nPC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPnN0ZDo6d3N0cmluZyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+Ci0gICAgICAgICAgPC9wYXJhbWV0ZXI+Ci0gICAgICAgICAgPHJldHVybnM+Ci0gICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgotICAgICAgICAgIDwvcmV0dXJucz4KLSAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+Ci0gICAgICAgIDwvbWV0aG9kPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+Ci0gICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICA8c3BlY2lhbGl6YXRpb24+Ci0gICAgICAgICAgPHRlbXBsYXRlLWFyZz5UKjwvdGVtcGxhdGUtYXJnPgotICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgotICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgotICAgICAgICAgICAgPHBhcmFtdHlwZT5UKjwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgotCi0gICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgotICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KLSAgICAgICAgPHNwZWNpYWxpemF0aW9uPgotICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+c3RkOjp0eXBlX2luZGV4PC90ZW1wbGF0ZS1hcmc+Ci0gICAgICAgIDwvc3BlY2lhbGl6YXRpb24+Ci0gICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+Ci0gICAgICAgICAgICA8cGFyYW10eXBlPnN0ZDo6dHlwZV9pbmRleDwvcGFyYW10eXBlPgotICAgICAgICAgIDwvcGFyYW1ldGVyPgotICAgICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgICAgPHBhcmE+PGNvZGU+dmFsLmhhc2hfY29kZSgpPC9jb2RlPjwvcGFyYT4KLSAgICAgICAgICA8L3JldHVybnM+Ci0gICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgotICAgICAgICA8L21ldGhvZD4KLSAgICAgICAgPG5vdGVzPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgT25seSBhdmFpbGFibGUgaWYgaXQncyBpbiB5b3VyIHN0YW5kYXJkIGxpYnJhcnkgYW5kIEJvb3N0LkNvbmZpZwotICAgICAgICAgICAgaXMgYXdhcmUgb2YgaXQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L25vdGVzPgotICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+Ci0KLSAgICAgIDxmcmVlLWZ1bmN0aW9uLWdyb3VwIG5hbWU9IlN1cHBvcnQgZnVuY3Rpb25zIChCb29zdCBleHRlbnNpb24pLiI+IAotCi0gICAgICA8IS0tCi0gICAgICAgIGJvb3N0OjpoYXNoX2NvbWJpbmUKLSAgICAgICAgLS0+Ci0KLSAgICAgIDxmdW5jdGlvbiBuYW1lPSJoYXNoX2NvbWJpbmUiPgotICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KLSAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KLSAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJzZWVkIj48cGFyYW10eXBlPnNpemVfdCAmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InYiPjxwYXJhbXR5cGU+VCBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxwdXJwb3NlPjxzaW1wYXJhPgotICAgICAgICAgICAgQ2FsbGVkIHJlcGVhdGVkbHkgdG8gaW5jcmVtZW50YWxseSBjcmVhdGUgYSBoYXNoIHZhbHVlIGZyb20KLSAgICAgICAgICAgIHNldmVyYWwgdmFyaWFibGVzLgotICAgICAgICA8L3NpbXBhcmE+PC9wdXJwb3NlPgotICAgICAgICA8ZWZmZWN0cz48cHJvZ3JhbWxpc3Rpbmc+c2VlZCBePSA8ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odikgKyAweDllMzc3OWI5ICsgKHNlZWQgJmx0OyZsdDsgNikgKyAoc2VlZCAmZ3Q7Jmd0OyAyKTs8L3Byb2dyYW1saXN0aW5nPjwvZWZmZWN0cz4KLSAgICAgICAgPG5vdGVzPgotICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPiBpcyBjYWxsZWQgd2l0aG91dAotICAgICAgICAgIHF1YWxpZmljYXRpb24sIHNvIHRoYXQgb3ZlcmxvYWRzIGNhbiBiZSBmb3VuZCB2aWEgQURMLjwvcGFyYT4KLSAgICAgICAgICA8cGFyYT5UaGlzIGlzIGFuIGV4dGVuc2lvbiB0byBUUjE8L3BhcmE+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb3J3YXJkIGRlY2xhcmVkIGluCi0gICAgICAgICAgICA8Y29kZT4mbHQ7Ym9vc3QvZnVuY3Rpb25hbC9oYXNoX2Z3ZC5ocHAmZ3Q7PC9jb2RlPgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9ub3Rlcz4KLSAgICAgICAgPHRocm93cz4KLSAgICAgICAgICBPbmx5IHRocm93cyBpZiA8ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4oVCkgdGhyb3dzLgotICAgICAgICAgIFN0cm9uZyBleGNlcHRpb24gc2FmZXR5LCBhcyBsb25nIGFzIDxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPihUKQotICAgICAgICAgIGFsc28gaGFzIHN0cm9uZyBleGNlcHRpb24gc2FmZXR5LgotICAgICAgICA8L3Rocm93cz4KLSAgICAgIDwvZnVuY3Rpb24+Ci0KLSAgICAgIDwhLS0KLSAgICAgICAgYm9vc3Q6Omhhc2hfcmFuZ2UKLSAgICAgICAgLS0+Ci0KLSAgICAgIDxvdmVybG9hZGVkLWZ1bmN0aW9uIG5hbWU9Imhhc2hfcmFuZ2UiPgotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJJdCIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmaXJzdCI+PHBhcmFtdHlwZT5JdDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0ibGFzdCI+PHBhcmFtdHlwZT5JdDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJJdCIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InNlZWQiPjxwYXJhbXR5cGU+c3RkOjpzaXplX3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZmlyc3QiPjxwYXJhbXR5cGU+SXQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9Imxhc3QiPjxwYXJhbXR5cGU+SXQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHB1cnBvc2U+PHNpbXBhcmE+Ci0gICAgICAgICAgICBDYWxjdWxhdGUgdGhlIGNvbWJpbmVkIGhhc2ggdmFsdWUgb2YgdGhlIGVsZW1lbnRzIG9mIGFuIGl0ZXJhdG9yCi0gICAgICAgICAgICByYW5nZS4KLSAgICAgICAgPC9zaW1wYXJhPjwvcHVycG9zZT4KLSAgICAgICAgPGVmZmVjdHM+Ci0gICAgICAgICAgPHBhcmE+Rm9yIHRoZSB0d28gYXJndW1lbnQgb3ZlcmxvYWQ6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1zaXplX3Qgc2VlZCA9IDA7Ci0KLWZvcig7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpCi17Ci0gICAgPGZ1bmN0aW9ubmFtZT5oYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4oc2VlZCwgKmZpcnN0KTsKLX0KLQotcmV0dXJuIHNlZWQ7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICA8cGFyYT5Gb3IgdGhlIHRocmVlIGFyZ3VtZW50cyBvdmVybG9hZDo8L3BhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1mb3IoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KQotewotICAgIDxmdW5jdGlvbm5hbWU+aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+KHNlZWQsICpmaXJzdCk7Ci19Ci08L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2VmZmVjdHM+Ci0gICAgICAgIDxub3Rlcz4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIDxjb2RlPmhhc2hfcmFuZ2U8L2NvZGU+IGlzIHNlbnNpdGl2ZSB0byB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzCi0gICAgICAgICAgICBzbyBpdCB3b3VsZG4ndCBiZSBhcHByb3ByaWF0ZSB0byB1c2UgdGhpcyB3aXRoIGFuIHVub3JkZXJlZAotICAgICAgICAgICAgY29udGFpbmVyLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICA8cGFyYT5UaGlzIGlzIGFuIGV4dGVuc2lvbiB0byBUUjE8L3BhcmE+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb3J3YXJkIGRlY2xhcmVkIGluCi0gICAgICAgICAgICA8Y29kZT4mbHQ7Ym9vc3QvZnVuY3Rpb25hbC9oYXNoX2Z3ZC5ocHAmZ3Q7PC9jb2RlPgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9ub3Rlcz4KLSAgICAgICAgPHRocm93cz48cGFyYT4KLSAgICAgICAgICBPbmx5IHRocm93cyBpZiA8Y29kZT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4oc3RkOjppdGVyYXRvcl90cmFpdHMmbHQ7SXQmZ3Q7Ojp2YWx1ZV90eXBlKTwvY29kZT4KLSAgICAgICAgICB0aHJvd3MuIDxjb2RlPmhhc2hfcmFuZ2Uoc3RkOjpzaXplX3QmYW1wOywgSXQsIEl0KTwvY29kZT4gaGFzIGJhc2ljIGV4Y2VwdGlvbiBzYWZldHkgYXMgbG9uZyBhcwotICAgICAgICAgIDxjb2RlPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPihzdGQ6Oml0ZXJhdG9yX3RyYWl0cyZsdDtJdCZndDs6OnZhbHVlX3R5cGUpPC9jb2RlPgotICAgICAgICAgIGhhcyBiYXNpYyBleGNlcHRpb24gc2FmZXR5LgotICAgICAgICA8L3BhcmE+PC90aHJvd3M+Ci0gICAgICA8L292ZXJsb2FkZWQtZnVuY3Rpb24+Ci0KLSAgICAgIDwvZnJlZS1mdW5jdGlvbi1ncm91cD4KLQotICAgICAgPGZyZWUtZnVuY3Rpb24tZ3JvdXAgbmFtZT0iT3ZlcmxvYWRhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gKEJvb3N0IGV4dGVuc2lvbikuIj4KLQotICAgICAgPCEtLQotICAgICAgICBib29zdDo6aGFzaF92YWx1ZSAtIGludGVnZXJzCi0gICAgICAgIC0tPgotCi0gICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJoYXNoX3ZhbHVlIj4KLSAgICAgICAgPHB1cnBvc2U+PHNpbXBhcmE+Ci0gICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGFzaCBmdW5jdGlvbi4KLSAgICAgICAgPC9zaW1wYXJhPjwvcHVycG9zZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmJvb2w8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5jaGFyPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c2lnbmVkIGNoYXI8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT51bnNpZ25lZCBjaGFyPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+d2NoYXJfdDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnNob3J0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+dW5zaWduZWQgc2hvcnQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5pbnQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT51bnNpZ25lZCBpbnQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5sb25nPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+dW5zaWduZWQgbG9uZzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmxvbmcgbG9uZzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnVuc2lnbmVkIGxvbmcgbG9uZzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmZsb2F0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+ZG91YmxlPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+bG9uZyBkb3VibGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+PHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz48L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPlQqIGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLW5vbnR5cGUtcGFyYW1ldGVyIG5hbWU9Ik4iPjx0eXBlPnVuc2lnbmVkPC90eXBlPjwvdGVtcGxhdGUtbm9udHlwZS1wYXJhbWV0ZXI+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyPjxwYXJhbXR5cGU+VCAoJmFtcDt2YWwpW05dPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDwvc2lnbmF0dXJlPgotCi0gICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS1ub250eXBlLXBhcmFtZXRlciBuYW1lPSJOIj48dHlwZT51bnNpZ25lZDwvdHlwZT48L3RlbXBsYXRlLW5vbnR5cGUtcGFyYW1ldGVyPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlcj48cGFyYW10eXBlPmNvbnN0IFQgKCZhbXA7dmFsKVtOXTwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJDaCIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KLSAgICAgICAgICAgICAgPHBhcmFtdHlwZT5zdGQ6OmJhc2ljX3N0cmluZyZsdDtDaCwgc3RkOjpjaGFyX3RyYWl0cyZsdDtDaCZndDssIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT4KLSAgICAgICAgICA8L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0gICAgICAgICAgICAgIAotICAgICAgIDxzaWduYXR1cmU+Ci0gICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJCIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OnBhaXImbHQ7QSwgQiZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjp2ZWN0b3ImbHQ7VCwgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjpsaXN0Jmx0O1QsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6ZGVxdWUmbHQ7VCwgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJLIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQyIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgotICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6c2V0Jmx0O0ssIEMsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iSyIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkMiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6Om11bHRpc2V0Jmx0O0ssIEMsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iSyIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJDIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjptYXAmbHQ7SywgVCwgQywgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8c2lnbmF0dXJlPgotICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJLIi8+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkMiLz4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6Om11bHRpbWFwJmx0O0ssIFQsIEMsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjpjb21wbGV4Jmx0O1QmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OnR5cGVfaW5kZXg8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgotICAgICAgICAgICAgPHRlbXBsYXRlLW5vbnR5cGUtcGFyYW1ldGVyIG5hbWU9Ik4iPgotICAgICAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICAgIDwvdGVtcGxhdGUtbm9udHlwZS1wYXJhbWV0ZXI+Ci0gICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KLSAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OmFycmF5Jmx0O1QsIE4mZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KLSAgICAgICAgPC9zaWduYXR1cmU+Ci0KLSAgICAgICAgPHNpZ25hdHVyZT4KLSAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIgcGFjaz0iMSIvPgotICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+Ci0gICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjp0dXBsZSZsdDtULi4uJmd0OzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgotICAgICAgICA8L3NpZ25hdHVyZT4KLQotICAgICAgICA8ZGVzY3JpcHRpb24+PHBhcmE+Ci0gICAgICAgICAgR2VuZXJhbGx5IHNob3VsZG4ndCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgdXNlcnMsIGluc3RlYWQgdGhleSBzaG91bGQgdXNlCi0gICAgICAgICAgPGNsYXNzbmFtZT5ib29zdDo6aGFzaDwvY2xhc3NuYW1lPiwgPGZ1bmN0aW9ubmFtZT5ib29zdDo6aGFzaF9yYW5nZTwvZnVuY3Rpb25uYW1lPgotICAgICAgICAgIG9yIDxmdW5jdGlvbm5hbWU+Ym9vc3Q6Omhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPiB3aGljaAotICAgICAgICAgIGNhbGwgPGNvZGU+aGFzaF92YWx1ZTwvY29kZT4gd2l0aG91dCBuYW1lc3BhY2UgcXVhbGlmaWNhdGlvbiBzbyB0aGF0IG92ZXJsb2FkcwotICAgICAgICAgIGZvciBjdXN0b20gdHlwZXMgYXJlIGZvdW5kIHZpYSBBREwuCi0gICAgICAgIDwvcGFyYT48L2Rlc2NyaXB0aW9uPgotCi0gICAgICAgIDxub3Rlcz4KLSAgICAgICAgICA8cGFyYT5UaGlzIGlzIGFuIGV4dGVuc2lvbiB0byBUUjE8L3BhcmE+Ci0gICAgICAgIDwvbm90ZXM+Ci0KLSAgICAgICAgPHRocm93cz4KLSAgICAgICAgICAgIE9ubHkgdGhyb3dzIGlmIGEgdXNlciBzdXBwbGllZCB2ZXJzaW9uIG9mCi0gICAgICAgICAgICA8Y29kZT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT48L2NvZGU+Ci0gICAgICAgICAgICB0aHJvd3MgZm9yIGFuIGVsZW1lbnQgb2YgYSBjb250YWluZXIsIG9yCi0gICAgICAgICAgICBvbmUgb2YgdGhlIHR5cGVzIHN0b3JlZCBpbiBhIHBhaXIuCi0gICAgICAgIDwvdGhyb3dzPgotCi0gICAgICAgIDxyZXR1cm5zPgotICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgotICAgICAgICAgICAgPHRncm91cCBjb2xzPSIyIj4KLSAgICAgICAgICAgICAgPHRoZWFkPgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZXM8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlJldHVybnM8L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5ib29sPC9jb2RlPiwKLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y2hhcjwvY29kZT4sIDxjb2RlPnNpZ25lZCBjaGFyPC9jb2RlPiwgPGNvZGU+dW5zaWduZWQgY2hhcjwvY29kZT4sIDxjb2RlPndjaGFyX3Q8L2NvZGU+LAotICAgICAgICAgICAgICAgICAgICA8Y29kZT5zaG9ydDwvY29kZT4sIDxjb2RlPnVuc2lnbmVkIHNob3J0PC9jb2RlPiwKLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+aW50PC9jb2RlPiwgPGNvZGU+dW5zaWduZWQgaW50PC9jb2RlPiwgPGNvZGU+bG9uZzwvY29kZT4sIDxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPnZhbDwvY29kZT48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+bG9uZyBsb25nPC9jb2RlPiwgPGNvZGU+dW5zaWduZWQgbG9uZyBsb25nPC9jb2RlPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+dmFsPC9jb2RlPiB3aGVuIDxjb2RlPmFicyh2YWwpICZsdDs9IHN0ZDo6bnVtZXJpY19saW1pdHMmbHQ7c3RkOjpzaXplX3QmZ3Q7OjptYXgoKTwvY29kZT4uPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPmZsb2F0PC9jb2RlPiwgPGNvZGU+ZG91YmxlPC9jb2RlPiwgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5BbiB1bnNwZWNpZmllZCB2YWx1ZSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHNoYWxsIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+VCo8L2NvZGU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5BbiB1bnNwZWNpZmllZCB2YWx1ZSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHNoYWxsIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlPlQmIzE2MDt2YWxbTl08L2NvZGU+LAotICAgICAgICAgICAgICAgICAgICA8Y29kZT5jb25zdCYjMTYwO1QmIzE2MDt2YWxbTl08L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPmhhc2hfcmFuZ2UodmFsLCB2YWwrTik8L2NvZGU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6YmFzaWNfc3RyaW5nJmx0O0NoLCYjMTYwO3N0ZDo6Y2hhcl90cmFpdHMmbHQ7Q2gmZ3Q7LCYjMTYwO0EmZ3Q7PC9jb2RlPiwKLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjp2ZWN0b3ImbHQ7VCwmIzE2MDtBJmd0OzwvY29kZT4sCi0gICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6bGlzdCZsdDtULCYjMTYwO0EmZ3Q7PC9jb2RlPiwKLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjpkZXF1ZSZsdDtULCYjMTYwO0EmZ3Q7PC9jb2RlPiwKLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjpzZXQmbHQ7SywmIzE2MDtDLCYjMTYwO0EmZ3Q7PC9jb2RlPiwKLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjptdWx0aXNldCZsdDtLLCYjMTYwO0MsJiMxNjA7QSZndDs8L2NvZGU+LAotICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6Om1hcCZsdDtLLCYjMTYwO1QsJiMxNjA7QywmIzE2MDtBJmd0OzwvY29kZT4sCi0gICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6bXVsdGltYXAmbHQ7SywmIzE2MDtULCYjMTYwO0MsJiMxNjA7QSZndDs8L2NvZGU+LAotICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6OmFycmF5Jmx0O1QsJiMxNjA7TiZndDs8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPmhhc2hfcmFuZ2UodmFsLmJlZ2luKCksIHZhbC5lbmQoKSk8L2NvZGU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPnN0ZDo6cGFpciZsdDtBLCBCJmd0OzwvY29kZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxwcm9ncmFtbGlzdGluZz5zaXplX3Qgc2VlZCA9IDA7Ci08ZnVuY3Rpb25uYW1lPmhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPihzZWVkLCB2YWwuZmlyc3QpOwotPGZ1bmN0aW9ubmFtZT5oYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4oc2VlZCwgdmFsLnNlY29uZCk7Ci1yZXR1cm4gc2VlZDs8L3Byb2dyYW1saXN0aW5nPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5zdGQ6OnR1cGxlJmx0O1QuLi4mZ3Q7PC9jb2RlPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+PHByb2dyYW1saXN0aW5nPnNpemVfdCBzZWVkID0gMDsKLTxmdW5jdGlvbm5hbWU+aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+KHNlZWQsIGdldCZsdDswJmd0Oyh2YWwpKTsKLTxmdW5jdGlvbm5hbWU+aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+KHNlZWQsIGdldCZsdDsxJmd0Oyh2YWwpKTsKLS8vIC4uLi4KLXJldHVybiBzZWVkOzwvcHJvZ3JhbWxpc3Rpbmc+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6OmNvbXBsZXgmbHQ7VCZndDs8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PldoZW4gPGNvZGU+VDwvY29kZT4gaXMgYSBidWlsdCBpbiB0eXBlIGFuZCA8Y29kZT52YWwuaW1hZygpID09IDA8L2NvZGU+LCB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIDxjb2RlPmhhc2hfdmFsdWUodmFsLnJlYWwoKSk8L2NvZGU+LiBPdGhlcndpc2UgYW4gdW5zcGVjaWZpZWQgdmFsdWUsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyBzaGFsbCB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6OnR5cGVfaW5kZXg8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPnZhbC5oYXNoX2NvZGUoKTwvY29kZT48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgPC90Z3JvdXA+Ci0gICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgotICAgICAgICA8L3JldHVybnM+Ci0gICAgICA8L292ZXJsb2FkZWQtZnVuY3Rpb24+Ci0gICAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+Ci0gICAgPC9uYW1lc3BhY2U+Ci0gIDwvaGVhZGVyPgotPC9saWJyYXJ5LXJlZmVyZW5jZT4KLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3RoYW5rcy5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdGhhbmtzLnFiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNjNTEwOC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdGhhbmtzLnFiaworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLQotWy8gQ29weXJpZ2h0IDIwMDUtMjAwOCBEYW5pZWwgSmFtZXMuCi0gLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQotCi1bc2VjdGlvbjphY2tub3dsZWRnZW1lbnRzIEFja25vd2xlZGdlbWVudHNdCi0KLVRoaXMgbGlicmFyeSBpcyBiYXNlZCBvbiB0aGUgZGVzaWduIGJ5IFBldGVyIERpbW92LiBEdXJpbmcgdGhlIGluaXRpYWwKLWRldmVsb3BtZW50Ci1Kb2FxdcOtbiBNIEzDs3BleiBNdcOxb3ogbWFkZSBtYW55IHVzZWZ1bCBzdWdnZXN0aW9ucyBhbmQgY29udHJpYnV0ZWQgZml4ZXMuCi0KLVRoZSBmb3JtYWwgcmV2aWV3IHdhcyBtYW5hZ2VkIGJ5IFRob3JzdGVuIE90dG9zZW4sIGFuZCB0aGUgbGlicmFyeSByZXZpZXdlZCBieToKLURhdmlkIEFicmFoYW1zLCBBbGJlcnRvIEJhcmJhdGksIFRvcGhlciBDb29wZXIsIENhbGViIEVwc3RlaW4sIERhdmUgSGFycmlzLAotQ2hyaXMgSmVmZmVyc29uLCBCcm9uZWsgS296aWNraSwgSm9obiBNYWRkb2NrLCBUb2JpYXMgU3dpbmdlciwgSmFhcCBTdXRlciwKLVJvYiBTdGV3YXJ0IGFuZCBQYXZlbCBWb3plbmlsZWsuIFNpbmNlIHRoZW4sIGZ1cnRoZXIgY29uc3RydWN0aXZlIGNyaXRpY2lzbSBoYXMKLWJlZW4gbWFkZSBieSBEYW5pZWwgS3LDvGdsZXIsIEFsZXhhbmRlciBOYXNvbm92IGFuZCDmsojmhafls7AuCi0KLVRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGFzaCBmdW5jdGlvbiBmb3IgcG9pbnRlcnMgaXMgYmFzZWQgb24gc3VnZ2VzdGlvbnMKLW1hZGUgYnkgQWxiZXJ0byBCYXJiYXRpIGFuZCBEYXZlIEhhcnJpcy4gRGF2ZSBIYXJyaXMgYWxzbyBzdWdnZXN0ZWQgYW4KLWltcG9ydGFudCBpbXByb3ZlbWVudCB0byBbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXSB0aGF0IHdhcyB0YWtlbiB1cC4KLQotU29tZSB1c2VmdWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBmbG9hdGluZyBwb2ludCBoYXNoIGFsZ29yaXRobSB3ZXJlIHN1Z2dlc3RlZAotYnkgRGFuaWVsIEtyw7xnbGVyLgotCi1UaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gY2FtZSBmcm9tIEplcmVteSBCLiBNYWl0aW4tU2hlcGFyZCdzIGhhc2ggdGFibGUKLWxpYnJhcnksIGFsdGhvdWdoIHRoaXMgaXMgYSBjb21wbGV0ZSByZXdyaXRlLgotCi1bZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy90dXRvcmlhbC5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdHV0b3JpYWwucWJrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTA2N2E3Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy90dXRvcmlhbC5xYmsKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotCi1bLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KLSAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCi0KLVtkZWYgX19tdWx0aS1pbmRleC1zaG9ydF9fIFtAYm9vc3Q6L2xpYnMvbXVsdGlfaW5kZXgvZG9jL2luZGV4Lmh0bWwKLSAgICBCb29zdC5NdWx0aUluZGV4XV0KLQotW3NlY3Rpb246dHV0b3JpYWwgVHV0b3JpYWxdCi0KLVdoZW4gdXNpbmcgYSBoYXNoIGluZGV4IHdpdGggX19tdWx0aS1pbmRleC1zaG9ydF9fLCB5b3UgZG9uJ3QgbmVlZCB0byBkbwotYW55dGhpbmcgdG8gdXNlIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gYXMgaXQgdXNlcyBpdCBieSBkZWZhdWx0LgotVG8gZmluZCBvdXQgaG93IHRvIHVzZSBhIHVzZXItZGVmaW5lZCB0eXBlLCByZWFkIHRoZQotW2xpbmsgaGFzaC5jdXN0b20gc2VjdGlvbiBvbiBleHRlbmRpbmcgYm9vc3Q6Omhhc2ggZm9yIGEgY3VzdG9tIGRhdGEgdHlwZV0uCi0KLUlmIHlvdXIgc3RhbmRhcmQgbGlicmFyeSBzdXBwbGllcyBpdHMgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoZSB1bm9yZGVyZWQKLWFzc29jaWF0aXZlIGNvbnRhaW5lcnMgYW5kIHlvdSB3aXNoIHRvIHVzZQotW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSwganVzdCB1c2UgYW4gZXh0cmEgdGVtcGxhdGUgcGFyYW1ldGVyOgotCi0gICAgc3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQ8aW50LCBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDxpbnQ+ID4KLSAgICAgICAgICAgIHNldF9vZl9pbnRzOwotCi0gICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6cGFpcjxpbnQsIGludD4sIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPHN0ZDo6cGFpcjxpbnQsIGludD4gPgotICAgICAgICAgICAgc2V0X29mX3BhaXJzOwotCi0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPGludCwgc3RkOjpzdHJpbmcsIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPGludD4gPiBtYXBfaW50X3RvX3N0cmluZzsKLQotVG8gdXNlIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gZGlyZWN0bHksIGNyZWF0ZSBhbiBpbnN0YW5jZSBhbmQgY2FsbCBpdCBhcyBhIGZ1bmN0aW9uOgotCi0gICAgI2luY2x1ZGUgPGBgW2hlYWRlcnJlZiBib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwXWBgPgotCi0gICAgaW50IG1haW4oKQotICAgIHsKLSAgICAgICAgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8c3RkOjpzdHJpbmc+IHN0cmluZ19oYXNoOwotCi0gICAgICAgIHN0ZDo6c2l6ZV90IGggPSBzdHJpbmdfaGFzaCgiSGFzaCBtZSIpOwotICAgIH0KLQotRm9yIGFuIGV4YW1wbGUgb2YgZ2VuZXJpYyB1c2UsIGhlcmUgaXMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHZlY3RvcgotY29udGFpbmluZyB0aGUgaGFzaGVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIGNvbnRhaW5lcjoKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IGdldF9oYXNoZXMoQ29udGFpbmVyIGNvbnN0JiB4KQotICAgIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IGhhc2hlczsKLSAgICAgICAgc3RkOjp0cmFuc2Zvcm0oeC5iZWdpbigpLCB4LmVuZCgpLCBzdGQ6Omluc2VydF9pdGVyYXRvcihoYXNoZXMpLAotICAgICAgICAgICAgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPigpKTsKLQotICAgICAgICByZXR1cm4gaGFzaGVzOwotICAgIH0KLQotW2VuZHNlY3RdCi0KLVtzZWN0aW9uOmN1c3RvbSBFeHRlbmRpbmcgYm9vc3Q6Omhhc2ggZm9yIGEgY3VzdG9tIGRhdGEgdHlwZV0KLQotW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbgotW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfdmFsdWUgaGFzaF92YWx1ZV0uCi1UaGUgbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBzbyB0aGF0IGl0IGNhbiBkZXRlY3Qgb3ZlcmxvYWRzIHZpYSBhcmd1bWVudAotZGVwZW5kYW50IGxvb2t1cC4gU28gaWYgdGhlcmUgaXMgYSBmcmVlIGZ1bmN0aW9uIGBoYXNoX3ZhbHVlYCBpbiB0aGUgc2FtZQotbmFtZXNwYWNlIGFzIGEgY3VzdG9tIHR5cGUsIGl0IHdpbGwgZ2V0IGNhbGxlZC4KLQotSWYgeW91IGhhdmUgYSBzdHJ1Y3R1cmUgYGxpYnJhcnk6OmJvb2tgLCB3aGVyZSBlYWNoIGBib29rYCBpcyB1bmlxdWVseQotZGVmaW5lZCBieSBpdCdzIG1lbWJlciBgaWRgOgotCi0gICAgbmFtZXNwYWNlIGxpYnJhcnkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBib29rCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpZDsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGF1dGhvcjsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRpdGxlOwotCi0gICAgICAgICAgICAvLyAuLi4uCi0gICAgICAgIH07Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGJvb2sgY29uc3QmIGEsIGJvb2sgY29uc3QmIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhLmlkID09IGIuaWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLVRoZW4gYWxsIHlvdSB3b3VsZCBuZWVkIHRvIGRvIGlzIHdyaXRlIHRoZSBmdW5jdGlvbiBgbGlicmFyeTo6aGFzaF92YWx1ZWA6Ci0KLSAgICBuYW1lc3BhY2UgbGlicmFyeQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShib29rIGNvbnN0JiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDxpbnQ+IGhhc2hlcjsKLSAgICAgICAgICAgIHJldHVybiBoYXNoZXIoYi5pZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLUFuZCB5b3UgY2FuIG5vdyB1c2UgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSB3aXRoIGJvb2s6Ci0KLSAgICBsaWJyYXJ5Ojpib29rIGtuaWZlKDM0NTgsICJaYW5lIEdyZXkiLCAiVGhlIEhhc2ggS25pZmUgT3V0Zml0Iik7Ci0gICAgbGlicmFyeTo6Ym9vayBkYW5kZWxpb24oMTM1NCwgIlBhdWwgSi4gU2hhbmxleSIsCi0gICAgICAgICJIYXNoICYgRGFuZGVsaW9uIEdyZWVucyIpOwotCi0gICAgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8bGlicmFyeTo6Ym9vaz4gYm9va19oYXNoZXI7Ci0gICAgc3RkOjpzaXplX3Qga25pZmVfaGFzaF92YWx1ZSA9IGJvb2tfaGFzaGVyKGtuaWZlKTsKLQotICAgIC8vIElmIHN0ZDo6dW5vcmRlcmVkX3NldCBpcyBhdmFpbGFibGU6Ci0gICAgc3RkOjp1bm9yZGVyZWRfc2V0PGxpYnJhcnk6OmJvb2ssIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPGxpYnJhcnk6OmJvb2s+ID4gYm9va3M7Ci0gICAgYm9va3MuaW5zZXJ0KGtuaWZlKTsKLSAgICBib29rcy5pbnNlcnQobGlicmFyeTo6Ym9vaygyNDQzLCAiTGluZGdyZW4sIFRvcmdueSIsICJIYXNoIikpOwotICAgIGJvb2tzLmluc2VydChsaWJyYXJ5Ojpib29rKDE5NTMsICJTbnlkZXIsIEJlcm5hZGV0dGUgTS4iLAotICAgICAgICAiSGVhdmVubHkgSGFzaDogQSBUYXN0eSBNaXggb2YgYSBNb3RoZXIncyBNZWRpdGF0aW9ucyIpKTsKLQotICAgIGFzc2VydChib29rcy5maW5kKGtuaWZlKSAhPSBib29rcy5lbmQoKSk7Ci0gICAgYXNzZXJ0KGJvb2tzLmZpbmQoZGFuZGVsaW9uKSA9PSBib29rcy5lbmQoKSk7Ci0KLVRoZSBmdWxsIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluOgotW0Bib29zdDovbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuaHBwIC9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHBdCi1hbmQKLVtAYm9vc3Q6L2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmNwcCAvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuY3BwXS4KLQotW3RpcAotV2hlbiB3cml0aW5nIGEgaGFzaCBmdW5jdGlvbiwgZmlyc3QgbG9vayBhdCBob3cgdGhlIGVxdWFsaXR5IGZ1bmN0aW9uIHdvcmtzLgotT2JqZWN0cyB0aGF0IGFyZSBlcXVhbCBtdXN0IGdlbmVyYXRlIHRoZSBzYW1lIGhhc2ggdmFsdWUuCi1XaGVuIG9iamVjdHMgYXJlIG5vdCBlcXVhbCB0aGV5IHNob3VsZCBnZW5lcmF0ZSBkaWZmZXJlbnQgaGFzaCB2YWx1ZXMuCi1JbiB0aGlzIG9iamVjdCBlcXVhbGl0eSB3YXMgYmFzZWQganVzdCBvbiB0aGUgaWQgc28gdGhlIGhhc2ggZnVuY3Rpb24KLW9ubHkgaGFzaGVzIHRoZSBpZC4gSWYgaXQgd2FzIGJhc2VkIG9uIHRoZSBvYmplY3QncyBuYW1lIGFuZCBhdXRob3IKLXRoZW4gdGhlIGhhc2ggZnVuY3Rpb24gc2hvdWxkIHRha2UgdGhlbSBpbnRvIGFjY291bnQKLShob3cgdG8gZG8gdGhpcyBpcyBkaXNjdXNzZWQgaW4gdGhlIG5leHQgc2VjdGlvbikuCi1dCi0KLVtlbmRzZWN0XQotCi1bc2VjdGlvbjpjb21iaW5lIENvbWJpbmluZyBoYXNoIHZhbHVlc10KLQotU2F5IHlvdSBoYXZlIGEgcG9pbnQgY2xhc3MsIHJlcHJlc2VudGluZyBhIHR3byBkaW1lbnNpb25hbCBsb2NhdGlvbjoKLQotICAgIGNsYXNzIHBvaW50Ci0gICAgewotICAgICAgICBpbnQgeDsKLSAgICAgICAgaW50IHk7Ci0gICAgcHVibGljOgotICAgICAgICBwb2ludCgpIDogeCgwKSwgeSgwKSB7fQotICAgICAgICBwb2ludChpbnQgeCwgaW50IHkpIDogeCh4KSwgeSh5KSB7fQotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShwb2ludCBjb25zdCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4ID09IG90aGVyLnggJiYgeSA9PSBvdGhlci55OwotICAgICAgICB9Ci0gICAgfTsKLQotYW5kIHlvdSB3aXNoIHRvIHVzZSBpdCBhcyB0aGUga2V5IGZvciBhbiBgdW5vcmRlcmVkX21hcGAuIFlvdSBuZWVkIHRvCi1jdXN0b21pc2UgdGhlIGhhc2ggZm9yIHRoaXMgc3RydWN0dXJlLiBUbyBkbyB0aGlzIHdlIG5lZWQgdG8gY29tYmluZQotdGhlIGhhc2ggdmFsdWVzIGZvciBgeGAgYW5kIGB5YC4gVGhlIGZ1bmN0aW9uCi1bZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXSBpcyBzdXBwbGllZCBmb3IgdGhpcyBwdXJwb3NlOgotCi0gICAgY2xhc3MgcG9pbnQKLSAgICB7Ci0gICAgICAgIC4uLgotCi0gICAgICAgIGZyaWVuZCBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHBvaW50IGNvbnN0JiBwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKLSAgICAgICAgICAgIGBgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfY29tYmluZV1gYChzZWVkLCBwLngpOwotICAgICAgICAgICAgYGBbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXWBgKHNlZWQsIHAueSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzZWVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLi4uCi0gICAgfTsKLQotQ2FsbHMgdG8gaGFzaF9jb21iaW5lIGluY3JlbWVudGFsbHkgYnVpbGQgdGhlIGhhc2ggZnJvbSB0aGUgZGlmZmVyZW50IG1lbWJlcnMKLW9mIHBvaW50LCBpdCBjYW4gYmUgcmVwZWF0ZWRseSBjYWxsZWQgZm9yIGFueSBudW1iZXIgb2YgZWxlbWVudHMuIEl0IGNhbGxzCi1bZnVuY3JlZiBib29zdDo6aGFzaF92YWx1ZSBoYXNoX3ZhbHVlXSBvbiB0aGUgc3VwcGxpZWQgZWxlbWVudCwgYW5kIGNvbWJpbmVzIGl0IHdpdGggdGhlIHNlZWQuCi0KLUZ1bGwgY29kZSBmb3IgdGhpcyBleGFtcGxlIGlzIGF0Ci1bQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb2ludC5jcHAgL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvaW50LmNwcF0uCi0KLVtub3RlCi1XaGVuIHVzaW5nIFtmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdIHRoZSBvcmRlciBvZiB0aGUKLWNhbGxzIG1hdHRlcnMuCi0nJycKLTxwcm9ncmFtbGlzdGluZz4KLSAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKLSAgICBib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIDEpOwotICAgIGJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgMik7Ci08L3Byb2dyYW1saXN0aW5nPgotcmVzdWx0cyBpbiBhIGRpZmZlcmVudCBzZWVkIHRvOgotPHByb2dyYW1saXN0aW5nPgotICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOwotICAgIGJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgMik7Ci0gICAgYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCAxKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0nJycKLUlmIHlvdSBhcmUgY2FsY3VsYXRpbmcgYSBoYXNoIHZhbHVlIGZvciBkYXRhIHdoZXJlIHRoZSBvcmRlciBvZiB0aGUgZGF0YQotZG9lc24ndCBtYXR0ZXIgaW4gY29tcGFyaXNvbnMgKGUuZy4gYSBzZXQpIHlvdSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlCi1kYXRhIGlzIGFsd2F5cyBzdXBwbGllZCBpbiB0aGUgc2FtZSBvcmRlci4KLV0KLQotVG8gY2FsY3VsYXRlIHRoZSBoYXNoIG9mIGFuIGl0ZXJhdG9yIHJhbmdlIHlvdSBjYW4gdXNlIFtmdW5jcmVmIGJvb3N0OjpoYXNoX3JhbmdlXToKLQotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb21lX3N0cmluZ3M7Ci0gICAgc3RkOjpzaXplX3QgaGFzaCA9IGBgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfcmFuZ2VdYGAoc29tZV9zdHJpbmdzLmJlZ2luKCksIHNvbWVfc3RyaW5ncy5lbmQoKSk7Ci0KLU5vdGUgdGhhdCB3aGVuIHdyaXRpbmcgdGVtcGxhdGUgY2xhc3NlcywgeW91IG1pZ2h0IG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlIG1haW4KLWhhc2ggaGVhZGVyIGFzIGl0J3MgcXVpdGUgYW4gZXhwZW5zaXZlIGluY2x1ZGUgdGhhdCBicmluZ3MgaW4gYSBsb3Qgb2Ygb3RoZXIKLWhlYWRlcnMsIHNvIGluc3RlYWQgeW91IGNhbiBpbmNsdWRlIHRoZSBgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwPmAKLWhlYWRlciB3aGljaCBmb3J3YXJkIGRlY2xhcmVzIFtjbGFzc3JlZiBib29zdDo6aGFzaF0sCi1bZnVuY3JlZiBib29zdDo6aGFzaF9yYW5nZV0gYW5kIFtmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdLiBZb3UnbGwgbmVlZCB0bwotaW5jbHVkZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGluc3RhbnRpYXRpbmcgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXS4gV2hlbiB1c2luZwotYSBjb250YWluZXIgdGhhdCB1c2VzIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gaXQgc2hvdWxkIGRvIHRoYXQgZm9yIHlvdSwgc28geW91cgotdHlwZSB3aWxsIHdvcmsgZmluZSB3aXRoIHRoZSBib29zdCBoYXNoIGNvbnRhaW5lcnMuIFRoZXJlJ3MgYW4gZXhhbXBsZSBvZiB0aGlzCi1pbiBbQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy90ZW1wbGF0ZS5ocHAgdGVtcGxhdGUuaHBwXSBhbmQKLVtAYm9vc3Q6L2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmNwcCB0ZW1wbGF0ZS5jcHBdLgotCi1bZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9KYW1maWxlLnYyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjkxNjIxLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotIyBDb3B5cmlnaHQgRGFuaWVsIEphbWVzIDIwMDUuIFVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGFyZQotIyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSMgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLXJ1biBib29rcy5jcHAgOwotcnVuIHBvaW50LmNwcCA7Ci1ydW4gcG9ydGFibGUuY3BwIDsKLXJ1biB0ZW1wbGF0ZS5jcHAgOwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODAyZTBlLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vYm9va3MuaHBwIgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLQotLy8gSWYgc3RkOjp1bm9yZGVyZWRfc2V0IHdhcyBhdmFpbGFibGU6Ci0vLyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgotCi0vLyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBuZG5ib29zdDo6aGFzaCB3aXRoIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24uCi0vLyBGb3IgZnVsbCBkZXRhaWxzLCBzZWUgdGhlIHR1dG9yaWFsLgotCi1pbnQgbWFpbigpCi17Ci0gICAgbGlicmFyeTo6Ym9vayBrbmlmZSgzNDU4LCAiWmFuZSBHcmV5IiwgIlRoZSBIYXNoIEtuaWZlIE91dGZpdCIpOwotICAgIGxpYnJhcnk6OmJvb2sgZGFuZGVsaW9uKDEzNTQsICJQYXVsIEouIFNoYW5sZXkiLCAiSGFzaCAmIERhbmRlbGlvbiBHcmVlbnMiKTsKLQotICAgIG5kbmJvb3N0OjpoYXNoPGxpYnJhcnk6OmJvb2s+IGJvb2tfaGFzaGVyOwotICAgIHN0ZDo6c2l6ZV90IGtuaWZlX2hhc2hfdmFsdWUgPSBib29rX2hhc2hlcihrbmlmZSk7Ci0gICAgKHZvaWQpa25pZmVfaGFzaF92YWx1ZTsgLy8gc3VwcHJlc3MgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKLQotICAgIC8vIElmIHN0ZDo6dW5vcmRlcmVkX3NldCB3YXMgYXZhaWxhYmxlOgotICAgIC8vCi0gICAgLy9zdGQ6OnVub3JkZXJlZF9zZXQ8bGlicmFyeTo6Ym9vaywgbmRuYm9vc3Q6Omhhc2g8bGlicmFyeTo6Ym9vaz4gPiBib29rczsKLSAgICAvL2Jvb2tzLmluc2VydChrbmlmZSk7Ci0gICAgLy9ib29rcy5pbnNlcnQobGlicmFyeTo6Ym9vaygyNDQzLCAiTGluZGdyZW4sIFRvcmdueSIsICJIYXNoIikpOwotICAgIC8vYm9va3MuaW5zZXJ0KGxpYnJhcnk6OmJvb2soMTk1MywgIlNueWRlciwgQmVybmFkZXR0ZSBNLiIsCi0gICAgLy8gICAgIkhlYXZlbmx5IEhhc2g6IEEgVGFzdHkgTWl4IG9mIGEgTW90aGVyJ3MgTWVkaXRhdGlvbnMiKSk7Ci0KLSAgICAvL2Fzc2VydChib29rcy5maW5kKGtuaWZlKSAhPSBib29rcy5lbmQoKSk7Ci0gICAgLy9hc3NlcnQoYm9va3MuZmluZChkYW5kZWxpb24pID09IGJvb2tzLmVuZCgpKTsKLQotICAgIHJldHVybiAwOwotfQotCi1uYW1lc3BhY2UgbGlicmFyeQotewotICAgIGJvb2wgb3BlcmF0b3I9PShib29rIGNvbnN0JiBhLCBib29rIGNvbnN0JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEuaWQgPT0gYi5pZDsKLSAgICB9Ci0KLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGJvb2sgY29uc3QmIGIpCi0gICAgewotICAgICAgICBuZG5ib29zdDo6aGFzaDxpbnQ+IGhhc2hlcjsKLSAgICAgICAgcmV0dXJuIGhhc2hlcihiLmlkKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NWE3OTguLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBuZG5ib29zdDo6aGFzaCB3aXRoIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24uCi0vLyBUaGUgaW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIGluIGJvb2tzLmNwcAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBsaWJyYXJ5Ci17Ci0gICAgc3RydWN0IGJvb2sKLSAgICB7Ci0gICAgICAgIGludCBpZDsKLSAgICAgICAgc3RkOjpzdHJpbmcgYXV0aG9yOwotICAgICAgICBzdGQ6OnN0cmluZyB0aXRsZTsKLQotICAgICAgICBib29rKGludCBpLCBzdGQ6OnN0cmluZyBjb25zdCYgYSwgc3RkOjpzdHJpbmcgY29uc3QmIHQpCi0gICAgICAgICAgICA6IGlkKGkpLCBhdXRob3IoYSksIHRpdGxlKHQpIHt9Ci0gICAgfTsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShib29rIGNvbnN0JiwgYm9vayBjb25zdCYpOwotICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoYm9vayBjb25zdCYpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9pbnQuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzZlM2UyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvaW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0KLS8vIFRoaXMgZXhhbXBsZSBpbGx1c3RyYXRlcyBob3cgdG8gdXNlIG5kbmJvb3N0OjpoYXNoX2NvbWJpbmUgdG8gZ2VuZXJhdGUgYSBoYXNoCi0vLyB2YWx1ZSBmcm9tIHRoZSBkaWZmZXJlbnQgbWVtYmVycyBvZiBhIGNsYXNzLiBGb3IgZnVsbCBkZXRhaWxzIHNlZSB0aGUgaGFzaAotLy8gdHV0b3JpYWwuCi0KLWNsYXNzIHBvaW50Ci17Ci0gICAgaW50IHg7Ci0gICAgaW50IHk7Ci1wdWJsaWM6Ci0gICAgcG9pbnQoKSA6IHgoMCksIHkoMCkge30KLSAgICBwb2ludChpbnQgeCwgaW50IHkpIDogeCh4KSwgeSh5KSB7fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KHBvaW50IGNvbnN0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB4ID09IG90aGVyLnggJiYgeSA9PSBvdGhlci55OwotICAgIH0KLQotICAgIGZyaWVuZCBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHBvaW50IGNvbnN0JiBwKQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3Qgc2VlZCA9IDA7Ci0gICAgICAgIG5kbmJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgcC54KTsKLSAgICAgICAgbmRuYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCBwLnkpOwotCi0gICAgICAgIHJldHVybiBzZWVkOwotICAgIH0KLX07Ci0KLWludCBtYWluKCkKLXsKLSAgICBuZG5ib29zdDo6aGFzaDxwb2ludD4gcG9pbnRfaGFzaGVyOwotCi0gICAgcG9pbnQgcDEoMCwgMCk7Ci0gICAgcG9pbnQgcDIoMSwgMik7Ci0gICAgcG9pbnQgcDMoNCwgMSk7Ci0gICAgcG9pbnQgcDQgPSBwMTsKLQotICAgIGFzc2VydChwb2ludF9oYXNoZXIocDEpID09IHBvaW50X2hhc2hlcihwNCkpOwotCi0gICAgLy8gVGhlc2UgdGVzdHMgY291bGQgbGVnYWxseSBmYWlsLCBidXQgaWYgdGhleSBkaWQgaXQnZCBiZSBhIHByZXR0eSBiYWQKLSAgICAvLyBoYXNoIGZ1bmN0aW9uLgotICAgIGFzc2VydChwb2ludF9oYXNoZXIocDEpICE9IHBvaW50X2hhc2hlcihwMikpOwotICAgIGFzc2VydChwb2ludF9oYXNoZXIocDEpICE9IHBvaW50X2hhc2hlcihwMykpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvcnRhYmxlLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvcnRhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiMmUwZS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0KLS8vIFRoaXMgZXhhbXBsZSBpbGx1c3RyYXRlcyBob3cgdG8gY3VzdG9taXNlIG5kbmJvb3N0OjpoYXNoIHBvcnRhYmx5LCBzbyB0aGF0Ci0vLyBpdCdsbCB3b3JrIG9uIGJvdGggY29tcGlsZXJzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IGFyZ3VtZW50IGRlcGVuZGVudCBsb29rdXAKLS8vIGFuZCBjb21waWxlcnMgdGhhdCBpbXBsZW1lbnQgc3RyaWN0IHR3by1waGFzZSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uLgotCi1uYW1lc3BhY2UgZm9vCi17Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgY2xhc3MgY3VzdG9tX3R5cGUKLSAgICB7Ci0gICAgICAgIFQgdmFsdWU7Ci0gICAgcHVibGljOgotICAgICAgICBjdXN0b21fdHlwZShUIHgpIDogdmFsdWUoeCkge30KLQotICAgICAgICBzdGQ6OnNpemVfdCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2g8VD4gaGFzaGVyOwotICAgICAgICAgICAgcmV0dXJuIGhhc2hlcih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi0jaWZkZWYgQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUAotbmFtZXNwYWNlIG5kbmJvb3N0Ci0jZWxzZQotbmFtZXNwYWNlIGZvbwotI2VuZGlmCi17Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShmb286OmN1c3RvbV90eXBlPFQ+IHgpCi0gICAgewotICAgICAgICByZXR1cm4geC5oYXNoKCk7Ci0gICAgfQotfQotCi1pbnQgbWFpbigpCi17Ci0gICAgZm9vOjpjdXN0b21fdHlwZTxpbnQ+IHgoMSksIHkoMiksIHooMSk7Ci0KLSAgICBuZG5ib29zdDo6aGFzaDxmb286OmN1c3RvbV90eXBlPGludD4gPiBoYXNoZXI7Ci0KLSAgICBhc3NlcnQoaGFzaGVyKHgpID09IGhhc2hlcih4KSk7Ci0gICAgYXNzZXJ0KGhhc2hlcih4KSAhPSBoYXNoZXIoeSkpOwotICAgIGFzc2VydChoYXNoZXIoeCkgPT0gaGFzaGVyKHopKTsKLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNThlZjVjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICJ0ZW1wbGF0ZS5ocHAiCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxib29zdC91bm9yZGVyZWRfc2V0LmhwcD4KLQotaW50IG1haW4oKQotewotICAgIHR5cGVkZWYgbXlfcGFpcjxpbnQsIGZsb2F0PiBwYWlyOwotICAgIG5kbmJvb3N0Ojp1bm9yZGVyZWRfc2V0PHBhaXI+IHBhaXJfc2V0OwotICAgIHBhaXJfc2V0LmVtcGxhY2UoMTAsIDAuNWYpOwotCi0gICAgYXNzZXJ0KHBhaXJfc2V0LmZpbmQocGFpcigxMCwgMC41ZikpICE9IHBhaXJfc2V0LmVuZCgpKTsKLSAgICBhc3NlcnQocGFpcl9zZXQuZmluZChwYWlyKDEwLCAwLjZmKSkgPT0gcGFpcl9zZXQuZW5kKCkpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODE3YTlkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gd3JpdGUgYSBoYXNoIGZ1bmN0aW9uIGZvciBhIHRlbXBsYXRlCi0vLyBjbGFzcy4KLQotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwPgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQSwgdHlwZW5hbWUgQj4KLWNsYXNzIG15X3BhaXIKLXsKLSAgICBBIHZhbHVlMTsKLSAgICBCIHZhbHVlMjsKLXB1YmxpYzoKLSAgICBteV9wYWlyKEEgY29uc3QmIHYxLCBCIGNvbnN0JiB2MikKLSAgICAgICAgOiB2YWx1ZTEodjEpLCB2YWx1ZTIodjIpCi0gICAge30KLQotICAgIGJvb2wgb3BlcmF0b3I9PShteV9wYWlyIGNvbnN0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTEgPT0gb3RoZXIudmFsdWUxICYmCi0gICAgICAgICAgICB2YWx1ZTIgPT0gb3RoZXIudmFsdWUyOwotICAgIH0KLQotICAgIGZyaWVuZCBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKG15X3BhaXIgY29uc3QmIHApCi0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKLSAgICAgICAgbmRuYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCBwLnZhbHVlMSk7Ci0gICAgICAgIG5kbmJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgcC52YWx1ZTIpOwotCi0gICAgICAgIHJldHVybiBzZWVkOwotICAgIH0KLX07Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmI1NzU3Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLTwhLS0KLUNvcHlyaWdodCAyMDA1LTIwMDcgRGFuaWVsIEphbWVzLgotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0tLT4KLQotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyBVUkw9Li4vLi4vLi4vZG9jL2h0bWwvaGFzaC5odG1sIj4KLTwvaGVhZD4KLTxib2R5PgotQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgcGxlYXNlIGdvIHRvCi08YSBocmVmPSIuLi8uLi8uLi9kb2MvaHRtbC9oYXNoLmh0bWwiPi4uLy4uLy4uL2RvYy9odG1sL2hhc2guaHRtbDwvYT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvSmFtZmlsZS52MgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjc2N2JmMy4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0KLSMgQ29weXJpZ2h0IDIwMDUtMjAxMiBEYW5pZWwgSmFtZXMuCi0jIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSMgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLWltcG9ydCB0ZXN0aW5nIDsKLQotcHJvamVjdCBoYXNoLXRlc3RzCi0gICAgOiByZXF1aXJlbWVudHMKLSAgICAgICAgPHdhcm5pbmdzPmFsbAotICAgICAgICA8dG9vbHNldD5pbnRlbDo8d2FybmluZ3M+b24KLSAgICAgICAgIzx0b29sc2V0PmludGVsOjxjeHhmbGFncz4tc3RyaWN0LWFuc2kKLSAgICAgICAgPHRvb2xzZXQ+Z2NjOjxjeHhmbGFncz4iLXBlZGFudGljIC1Xc3RyaWN0LWFsaWFzaW5nIC1mc3RyaWN0LWFsaWFzaW5nIC1XZXh0cmEgLVdzaWduLXByb21vIC1XdW51c2VkLXBhcmFtZXRlciAtV2NvbnZlcnNpb24gLVdmbG9hdC1lcXVhbCAtV3NoYWRvdyIKLSAgICAgICAgPHRvb2xzZXQ+ZGFyd2luOjxjeHhmbGFncz4iLXBlZGFudGljIC1Xc3RyaWN0LWFsaWFzaW5nIC1mc3RyaWN0LWFsaWFzaW5nIC1XZXh0cmEgLVdzaWduLXByb21vIC1XdW51c2VkLXBhcmFtZXRlciAtV2NvbnZlcnNpb24gLVdmbG9hdC1lcXVhbCAtV3NoYWRvdyIKLSAgICAgICAgIzx0b29sc2V0Pm1zdmM6PHdhcm5pbmdzLWFzLWVycm9ycz5vbgotICAgICAgICAjPHRvb2xzZXQ+Z2NjOjx3YXJuaW5ncy1hcy1lcnJvcnM+b24KLSAgICAgICAgIzx0b29sc2V0PmRhcndpbjo8d2FybmluZ3MtYXMtZXJyb3JzPm9uCi0gICAgOwotCi10ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvaGFzaAotICAgIDoKLSAgICAgICAgWyBydW4gaGFzaF9md2RfdGVzdF8xLmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfZndkX3Rlc3RfMi5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX251bWJlcl90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfZW51bV90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfcG9pbnRlcl90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfZnVuY3Rpb25fcG9pbnRlcl90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfZmxvYXRfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX2xvbmdfZG91YmxlX3Rlc3QuY3BwIF0KLSAgICAgICAgWyBydW4gaGFzaF9zdHJpbmdfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX3JhbmdlX3Rlc3QuY3BwIF0KLSAgICAgICAgWyBydW4gaGFzaF9jdXN0b21fdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX2dsb2JhbF9uYW1lc3BhY2VfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX2ZyaWVuZF90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfYnVpbHRfaW5fYXJyYXlfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX3ZhbHVlX2FycmF5X3Rlc3QuY3BwIF0KLSAgICAgICAgWyBydW4gaGFzaF92ZWN0b3JfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX2xpc3RfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX2RlcXVlX3Rlc3QuY3BwIF0KLSAgICAgICAgWyBydW4gaGFzaF9zZXRfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX21hcF90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfY29tcGxleF90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfdHlwZV9pbmRleF90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfc3RkX2FycmF5X3Rlc3QuY3BwIF0KLSAgICAgICAgWyBydW4gaGFzaF9zdGRfdHVwbGVfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBoYXNoX3N0ZF9zbWFydF9wdHJfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBsaW5rX3Rlc3QuY3BwIGxpbmtfdGVzdF8yLmNwcCBdCi0gICAgICAgIFsgcnVuIGxpbmtfZXh0X3Rlc3QuY3BwIGxpbmtfbm9fZXh0X3Rlc3QuY3BwIF0KLSAgICAgICAgWyBydW4gZXh0ZW5zaW9uc19ocHBfdGVzdC5jcHAgXQotICAgICAgICBbIGNvbXBpbGUtZmFpbCBoYXNoX25vX2V4dF9mYWlsX3Rlc3QuY3BwIF0KLSAgICAgICAgWyBjb21waWxlLWZhaWwgbmFtZXNwYWNlX2ZhaWxfdGVzdC5jcHAgXQotICAgICAgICBbIHJ1biBpbXBsaWNpdF90ZXN0LmNwcCBdCi0gICAgICAgIFsgcnVuIGhhc2hfbm9fZXh0X21hY3JvXzEuY3BwIF0KLSAgICAgICAgWyBydW4gaGFzaF9ub19leHRfbWFjcm9fMi5jcHAgXQotICAgIDsKLQotdGVzdC1zdWl0ZSBmdW5jdGlvbmFsL2hhc2hfbm9fZXh0Ci0gICAgOgotICAgICAgICBbIHJ1biBoYXNoX251bWJlcl90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9udW1iZXJfdGVzdCBdCi0gICAgICAgIFsgcnVuIGhhc2hfcG9pbnRlcl90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9wb2ludGVyX3Rlc3QgXQotICAgICAgICBbIHJ1biBoYXNoX2Z1bmN0aW9uX3BvaW50ZXJfdGVzdC5jcHAgOiA6IDogPGRlZmluZT5CT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgOiBub19leHRfZnVuY3Rpb25fcG9pbnRlcl90ZXN0IF0KLSAgICAgICAgWyBydW4gaGFzaF9mbG9hdF90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9mbG9hdF90ZXN0IF0KLSAgICAgICAgWyBydW4gaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9sb25nX2RvdWJsZV90ZXN0IF0KLSAgICAgICAgWyBydW4gaGFzaF9zdHJpbmdfdGVzdC5jcHAgOiA6IDogPGRlZmluZT5CT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgOiBub19leHRfc3RyaW5nX3Rlc3QgXQotICAgICAgICBbIHJ1biBsaW5rX3Rlc3QuY3BwIGxpbmtfdGVzdF8yLmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9saW5rX3Rlc3QgXQotICAgIDsKLQotIyBUZXN0cyB0byBzZWUgaWYgdGhlIGZsb2F0aW5nIHBvaW50IGhhc2ggaXMgdXNpbmcgdGhlIGJpbmFyeSBoYXNoLgotIyBOb3QgcnVuIG5vcm1hbGx5IGJlY2F1c2Ugb24gc29tZSBwbGF0Zm9ybXMgdGhlc2Ugc2hvdWxkIGZhaWwuCi10ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvaGFzaF9ub19nZW5lcmljX2Zsb2F0Ci0gICAgOgotICAgICAgICBbIHJ1biBoYXNoX2Zsb2F0X3Rlc3QuY3BwCi0gICAgICAgICAgICA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfREVUQUlMX1RFU1RfV0lUSE9VVF9HRU5FUklDCi0gICAgICAgICAgICA6IGhhc2hfZmxvYXRfdGVzdF9ub19nZW5lcmljIF0KLSAgICAgICAgWyBydW4gaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcAotICAgICAgICAgICAgOiA6IDogPGRlZmluZT5CT09TVF9IQVNIX0RFVEFJTF9URVNUX1dJVEhPVVRfR0VORVJJQwotICAgICAgICAgICAgOiBoYXNoX2xvbmdfZG91YmxlX3Rlc3Rfbm9fZ2VuZXJpYyBdCi0gICAgOwotZXhwbGljaXQgZnVuY3Rpb25hbC9oYXNoX25vX2dlbmVyaWNfZmxvYXQgOwotCi1idWlsZC1wcm9qZWN0IC4uL2V4YW1wbGVzIDsKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvY29tcGlsZV90aW1lLmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvY29tcGlsZV90aW1lLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU0NDVkNS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2NvbXBpbGVfdGltZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Jhc2VfYW5kX2Rlcml2ZWQuaHBwPgotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgY29tcGlsZV90aW1lX3Rlc3RzKFQqKQotewotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKG5kbmJvb3N0Ojppc19iYXNlX2FuZF9kZXJpdmVkPAotICAgICAgICBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPFQsIHN0ZDo6c2l6ZV90PiwgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiA+Ojp2YWx1ZSkpOwotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2NvbmZpZy5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2NvbmZpZy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMTQyMmYuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb25maWcuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfU1REKQotIyAgZGVmaW5lIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFIHN0ZAotI2Vsc2UKLSMgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFIG5kbmJvb3N0Ci0jICBpZiAhZGVmaW5lZChCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMpCi0jICAgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfV0lOMzJfV0NFKQotLy8gVGhlIHN0YW5kYXJkIHdpbmRvd3MgbW9iaWxlIGhlYWRlcnMgdHJpZ2dlciB0aGlzIHdhcm5pbmcgc28gSSBkaXNhYmxlIGl0Ci0vLyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyMDEpICAgLy8gbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRlbnNpb25zX2hwcF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0ZW5zaW9uc19ocHBfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZjZmOGYuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRlbnNpb25zX2hwcF90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vIENoZWNrIHRoYXQgYm9vc3QvZnVuY3Rpb25hbC9oYXNoL2V4dGVuc2lvbnMuaHBwIHdvcmtzIG9rYXkuCi0vLwotLy8gSXQgcHJvYmFibHkgc2hvdWxkIGJlIGluIGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWwsIGJ1dCBzaW5jZSBpdCBpc24ndCBpdAotLy8gc2hvdWxkIHdvcmsuCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2gvZXh0ZW5zaW9ucy5ocHA+Ci0KLWludCBtYWluKCkgewotICAgIGludCB4WzJdID0geyAyLCAzIH07Ci0gICAgbmRuYm9vc3Q6Omhhc2g8aW50WzJdPiBoZjsKLSAgICBoZih4KTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvSmFtZmlsZS52MgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQzYzFiMS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2V4dHJhL0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0KLSMgQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgotIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0jIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi1pbXBvcnQgdGVzdGluZyA7Ci0KLWJ1aWxkLXByb2plY3QgLi4gOwotCi10ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvaGFzaC9jb25maWcKLSAgICA6Ci0gICAgICAgIFsgY29tcGlsZSBjaGVja19mbG9hdF9mdW5jcy5jcHAgXQotICAgIDsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2V4dHJhL2NoZWNrX2Zsb2F0X2Z1bmNzLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvY2hlY2tfZmxvYXRfZnVuY3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTgxN2JhLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvY2hlY2tfZmxvYXRfZnVuY3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcD4KLSNpbmNsdWRlIDxjbWF0aD4KLQotbmFtZXNwYWNlIHRlc3QKLXsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDE+Ci0gICAgc3RydWN0IGNoZWNrX3JldHVybl90eXBlCi0gICAgewotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDI+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGVxdWFscyhUMikKLSAgICAgICAgewotICAgICAgICAgICAgQk9PU1RfU1RBVElDX0FTU0VSVCgobmRuYm9vc3Q6OmlzX3NhbWU8VDEsIFQyPjo6dmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUMj4KLSAgICAgICAgc3RhdGljIHZvaWQgZXF1YWxzX3JlZihUMiYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKG5kbmJvb3N0Ojppc19zYW1lPFQxLCBUMj46OnZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDI+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRpYmxlKFQyKQotICAgICAgICB7Ci0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKChuZG5ib29zdDo6aXNfY29udmVydGlibGU8VDIsIFQxPjo6dmFsdWUpKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLWludCBtYWluKCkgewotICAgIGZsb2F0IGYgPSAwOwotICAgIGRvdWJsZSBkID0gMDsKLSAgICBsb25nIGRvdWJsZSBsID0gMDsKLQotICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGZsb2F0Pjo6ZXF1YWxzKHN0ZDo6bGRleHAoZiwgMCkpOwotICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGRvdWJsZT46OmVxdWFscyhzdGQ6OmxkZXhwKGQsIDApKTsKLSAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxsb25nIGRvdWJsZT46OmVxdWFscyhzdGQ6OmxkZXhwKGwsIDApKTsKLQotICAgIGludCBkdW1teSA9IDA7Ci0KLSAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxmbG9hdD46OmVxdWFscyhzdGQ6OmZyZXhwKGYsICZkdW1teSkpOwotICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGRvdWJsZT46OmVxdWFscyhzdGQ6OmZyZXhwKGQsICZkdW1teSkpOwotICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGxvbmcgZG91YmxlPjo6ZXF1YWxzKHN0ZDo6ZnJleHAobCwgJmR1bW15KSk7Ci0KLSNpZiBCT09TVF9IQVNIX1VTRV9GUENMQVNTSUZZCi0KLSAgICBpbnQgKCpmcGMxKShmbG9hdCkgPSBzdGQ6OmZwY2xhc3NpZnk7Ci0gICAgaW50ICgqZnBjMikoZG91YmxlKSA9IHN0ZDo6ZnBjbGFzc2lmeTsKLSAgICBpbnQgKCpmcGMzKShsb25nIGRvdWJsZSkgPSBzdGQ6OmZwY2xhc3NpZnk7Ci0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2J1aWx0X2luX2FycmF5X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2J1aWx0X2luX2FycmF5X3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjZmMzg1Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9idWlsdF9pbl9hcnJheV90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0jICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jICBlbHNlCi0jICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi12b2lkIGFycmF5X2ludF90ZXN0KCkKLXsKLSAgICBjb25zdCBpbnQgbGVuZ3RoMSA9IDI1OwotICAgIGludCBhcnJheTFbMjVdID0gewotICAgICAgICAyNiwgLTQzLCAzMiwgNjUsIDQ1LAotICAgICAgICAxMiwgNjcsIDMyLCAxMiwgMjMsCi0gICAgICAgIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgIDgsIC0xMiwgMjMsIDY1LCA0NSwKLSAgICAgICAgLTEsIDkzLCAtNTQsIDk4NywgMwotICAgIH07Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMjVdPiBoYXNoZXIxOwotCi0gICAgY29uc3QgaW50IGxlbmd0aDIgPSAxOwotICAgIGludCBhcnJheTJbMV0gPSB7M307Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMV0+IGhhc2hlcjI7Ci0KLSAgICBjb25zdCBpbnQgbGVuZ3RoMyA9IDI7Ci0gICAgaW50IGFycmF5M1syXSA9IHsyLCAzfTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsyXT4gaGFzaGVyMzsKLQotICAgIEJPT1NUX1RFU1QoaGFzaGVyMShhcnJheTEpCi0gICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGFycmF5MSwgYXJyYXkxICsgbGVuZ3RoMSkpOwotICAgIEJPT1NUX1RFU1QoaGFzaGVyMihhcnJheTIpCi0gICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGFycmF5MiwgYXJyYXkyICsgbGVuZ3RoMikpOwotICAgIEJPT1NUX1RFU1QoaGFzaGVyMyhhcnJheTMpCi0gICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGFycmF5MywgYXJyYXkzICsgbGVuZ3RoMykpOwotfQotCi12b2lkIHR3b19kaW1lbnNpb25hbF9hcnJheV90ZXN0KCkKLXsKLSAgICBpbnQgYXJyYXlbM11bMl0gPSB7ey01LCA2fSwgezcsIC0zfSwgezI2LCAxfX07Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbM11bMl0+IGhhc2hlcjsKLQotICAgIHN0ZDo6c2l6ZV90IHNlZWQxID0gMDsKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgMzsgKytpKQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3Qgc2VlZDIgPSAwOwotICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgMjsgKytqKQotICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCBhcnJheVtpXVtqXSk7Ci0gICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMSwgc2VlZDIpOwotICAgIH0KLQotICAgIEJPT1NUX1RFU1QoaGFzaGVyKGFycmF5KSA9PSBzZWVkMSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXIoYXJyYXkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoYXJyYXksIGFycmF5ICsgMykpOwotfQotCi0jZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLQotaW50IG1haW4oKQotewotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0gICAgYXJyYXlfaW50X3Rlc3QoKTsKLSAgICB0d29fZGltZW5zaW9uYWxfYXJyYXlfdGVzdCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY29tcGxleF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jb21wbGV4X3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY0MWQyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jb21wbGV4X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmICFkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotCi1pbnQgbWFpbigpIHt9Ci0KLSNlbHNlCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDQpICAgLy8gY29udmVyc2lvbiBmcm9tICd1bnNpZ25lZCBsb25nJyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5zaWduZWQgc2hvcnQnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDUpICAgLy8gY29udmVyc2lvbiBmcm9tICdpbnQnIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdCB1bnNpZ25lZCBzaG9ydCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaAotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDMwNSkgICAvLyB0cnVuY2F0aW9uIGZyb20gJ2RvdWJsZScgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0IHN0ZDo6Y29tcGxleDxmbG9hdD46Ol9UeScKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMDkpICAgLy8gdHJ1bmNhdGlvbiBvZiBjb25zdGFudCB2YWx1ZQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUxMikgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9yIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQKLSNpZiBCT09TVF9NU1ZDIDwgMTQwMAotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI2NykgICAvLyBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ3Vuc2lnbmVkIGludCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVxdWFsIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxjb21wbGV4PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIGdlbmVyaWNfY29tcGxleF90ZXN0cyhzdGQ6OmNvbXBsZXg8VD4gdikKLXsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6Y29tcGxleDxUPiA+IGNvbXBsZXhfaGFzaGVyOwotCi0gICAgQk9PU1RfVEVTVChjb21wbGV4X2hhc2hlcih2KSA9PSBjb21wbGV4X2hhc2hlcih2KSk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHJlYWxfaGFzaGVyOwotICAgIFQgcmVhbCA9IHYucmVhbCgpOwotICAgIFQgaW1hZyA9IHYuaW1hZygpOwotCi0gICAgQk9PU1RfVEVTVChyZWFsX2hhc2hlcihyZWFsKSA9PSBjb21wbGV4X2hhc2hlcihzdGQ6OmNvbXBsZXg8VD4ocmVhbCkpKTsKLQotICAgIGlmKGltYWcgIT0gMCAmJiByZWFsX2hhc2hlcihyZWFsKSA9PSBjb21wbGV4X2hhc2hlcih2KSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3M7Ci0gICAgICAgIG9zPDwicmVhbF9oYXNoZXIoIjw8cmVhbDw8IikgPT0gY29tcGxleF9oYXNoZXIoIgotICAgICAgICAgICAgPDx2LnJlYWwoKTw8IiArICI8PHYuaW1hZygpPDwiaSkgPT0gIgotICAgICAgICAgICAgPDxyZWFsX2hhc2hlcihyZWFsKTw8IiAoVGhpcyBtaWdodCBub3QgYmUgYSBidWcpLiI7Ci0gICAgICAgIEJPT1NUX0VSUk9SKG9zLnN0cigpLmNfc3RyKCkpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIEZsb2F0Pgotdm9pZCBjb21wbGV4X2Zsb2F0X3Rlc3RzKEZsb2F0KikKLXsKLSAgICB0eXBlZGVmIHN0ZDo6Y29tcGxleDxGbG9hdD4gY29tcGxleDsKLSAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgwLDApKTsKLSAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgwLjUsMCkpOwotICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDI1LDApKTsKLSAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgyNSwwKSk7Ci0gICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoc3RhdGljX2Nhc3Q8RmxvYXQ+KC02Ny41MzI0NTM1KSxzdGF0aWNfY2FzdDxGbG9hdD4oNTYuMjM1Nzg2NzgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBJbnRlZ2VyPgotdm9pZCBjb21wbGV4X2ludGVncmFsX3Rlc3RzKEludGVnZXIqKQotewotICAgIHR5cGVkZWYgc3RkOjpjb21wbGV4PEludGVnZXI+IGNvbXBsZXg7Ci0gICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMCwwKSk7Ci0gICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMTUzNDIsMTI0KSk7Ci0gICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMjUsNTQzNTYpKTsKLSAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCg1MzI1LDIzNDYpKTsKLSAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgtMjQzODk3LC00OTkyMzg3NCkpOwotICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KC01NDMsNzYzKSk7Ci19Ci0KLWludCBtYWluKCkKLXsKLSAgICAvLyBJJ3ZlIGNvbW1lbnRzIG91dCB0aGUgc2hvcnQgYW5kIHVuc2lnbmVkIHNob3J0IHRlc3RzCi0gICAgLy8gYXMgdGhleSBjYXVzZSB3YXJuaW5ncyBhbmQgZG9uJ3QgcmVhbGx5IHRlc3QKLSAgICAvLyBhbnl0aGluZyB0aGF0IHRoZSBvdGhlciB0ZXN0cyBhbHJlYWR5IGRlYWwgd2l0aC4KLQotICAgIGNvbXBsZXhfZmxvYXRfdGVzdHMoKGZsb2F0KikgMCk7Ci0gICAgY29tcGxleF9mbG9hdF90ZXN0cygoZG91YmxlKikgMCk7Ci0gICAgY29tcGxleF9mbG9hdF90ZXN0cygobG9uZyBkb3VibGUqKSAwKTsKLSAgICAvL2NvbXBsZXhfaW50ZWdyYWxfdGVzdHMoKHNob3J0KikgMCk7Ci0gICAgY29tcGxleF9pbnRlZ3JhbF90ZXN0cygoaW50KikgMCk7Ci0gICAgY29tcGxleF9pbnRlZ3JhbF90ZXN0cygobG9uZyopIDApOwotICAgIC8vY29tcGxleF9pbnRlZ3JhbF90ZXN0cygodW5zaWduZWQgc2hvcnQqKSAwKTsKLSAgICBjb21wbGV4X2ludGVncmFsX3Rlc3RzKCh1bnNpZ25lZCBpbnQqKSAwKTsKLSAgICBjb21wbGV4X2ludGVncmFsX3Rlc3RzKCh1bnNpZ25lZCBsb25nKikgMCk7Ci0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KLQotI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY3VzdG9tX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2N1c3RvbV90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyYTMxMC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY3VzdG9tX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLW5hbWVzcGFjZSB0ZXN0Ci17Ci0gICAgc3RydWN0IGN1c3RvbQotICAgIHsKLSAgICAgICAgaW50IHZhbHVlXzsKLQotICAgICAgICBzdGQ6OnNpemVfdCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHZhbHVlXyAqIDEwOwotICAgICAgICB9Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQotICAgICAgICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjdXN0b20gY29uc3QmIHggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geC5oYXNoKCk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGN1c3RvbShpbnQgeCkgOiB2YWx1ZV8oeCkge30KLSAgICB9OwotfQotCi0jaWYgZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQotbmFtZXNwYWNlIG5kbmJvb3N0Ci17Ci0gICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZSh0ZXN0OjpjdXN0b20geCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4Lmhhc2goKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0jICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jICBlbHNlCi0jICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxjY3R5cGU+Ci0KLXZvaWQgY3VzdG9tX3Rlc3RzKCkKLXsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmN1c3RvbT4gY3VzdG9tX2hhc2hlcjsKLSAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoMTApID09IDEwMHUpOwotICAgIHRlc3Q6OmN1c3RvbSB4KDU1KTsKLSAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoeCkgPT0gNTUwdSk7Ci0KLSAgICB7Ci0gICAgICAgIHVzaW5nIG5hbWVzcGFjZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOwotICAgICAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoeCkgPT0gaGFzaF92YWx1ZSh4KSk7Ci0gICAgfQotCi0gICAgc3RkOjp2ZWN0b3I8dGVzdDo6Y3VzdG9tPiBjdXN0b21fdmVjdG9yOwotICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDUpOwotICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDI1KTsKLSAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjaygzNSk7Ci0KLSAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tKDUpKTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tKDI1KSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbSgzNSkpOwotCi0gICAgc3RkOjpzaXplX3Qgc2VlZDIgPSAwOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgNTB1KTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDI1MHUpOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgMzUwdSk7Ci0KLSAgICBCT09TVF9URVNUKHNlZWQgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSgKLSAgICAgICAgY3VzdG9tX3ZlY3Rvci5iZWdpbigpLCBjdXN0b21fdmVjdG9yLmVuZCgpKSk7Ci0gICAgQk9PU1RfVEVTVChzZWVkID09IHNlZWQyKTsKLX0KLQotI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0KLWludCBtYWluKCkKLXsKLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotICAgIGN1c3RvbV90ZXN0cygpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZGVxdWVfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZGVxdWVfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYTlkNDAuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2RlcXVlX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSMgIGVsc2UKLSMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSMgIGVuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0KLSNpbmNsdWRlIDxkZXF1ZT4KLQotdXNpbmcgc3RkOjpkZXF1ZTsKLSNkZWZpbmUgQ09OVEFJTkVSX1RZUEUgZGVxdWUKLSNpbmNsdWRlICIuL2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAiCi0KLSNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi1pbnQgbWFpbigpCi17Ci0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSAgICBkZXF1ZV90ZXN0czo6ZGVxdWVfaGFzaF9pbnRlZ2VyX3Rlc3RzKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2VudW1fdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZW51bV90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgxMzg3YS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZW51bV90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLSNpbmNsdWRlICIuL2NvbXBpbGVfdGltZS5ocHAiCi0KLW5hbWVzcGFjZSB0ZXN0IHsKLSAgICBlbnVtIGVudW1fb3ZlcnJpZGUgeyBlbnVtX292ZXJyaWRlMSwgZW51bV9vdmVycmlkZTIgfTsKLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGVudW1fb3ZlcnJpZGUpIHsgcmV0dXJuIDg5NjUzMjsgfQotCi0gICAgZW51bSBlbnVtMSB7IGVudW0xYSB9OwotICAgIGVudW0gZW51bTIgeyBlbnVtMmEsIGVudW0yYiB9OwotICAgIGVudW0gZW51bTMgeyBlbnVtM2EgPSA1NzQsIGVudW0zYiB9OwotICAgIGVudW0gZW51bTQgeyBlbnVtNGEgPSAtMTI1NzQsIGVudW00YiB9OwotfQotCi1pbnQgbWFpbigpIHsKLSAgICBjb21waWxlX3RpbWVfdGVzdHMoKHRlc3Q6OmVudW0xKikgMCk7Ci0gICAgY29tcGlsZV90aW1lX3Rlc3RzKCh0ZXN0OjplbnVtMiopIDApOwotICAgIGNvbXBpbGVfdGltZV90ZXN0cygodGVzdDo6ZW51bTMqKSAwKTsKLSAgICBjb21waWxlX3RpbWVfdGVzdHMoKHRlc3Q6OmVudW00KikgMCk7Ci0gICAgY29tcGlsZV90aW1lX3Rlc3RzKCh0ZXN0OjplbnVtX292ZXJyaWRlKikgMCk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmVudW0xPiBoYXNoMTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmVudW0yPiBoYXNoMjsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmVudW0zPiBoYXNoMzsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmVudW00PiBoYXNoNDsKLQotICAgIEJPT1NUX1RFU1QoaGFzaDEodGVzdDo6ZW51bTFhKSA9PSBoYXNoMSh0ZXN0OjplbnVtMWEpKTsKLQotICAgIEJPT1NUX1RFU1QoaGFzaDIodGVzdDo6ZW51bTJhKSA9PSBoYXNoMih0ZXN0OjplbnVtMmEpKTsKLSAgICBCT09TVF9URVNUKGhhc2gyKHRlc3Q6OmVudW0yYSkgIT0gaGFzaDIodGVzdDo6ZW51bTJiKSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoMih0ZXN0OjplbnVtMmIpID09IGhhc2gyKHRlc3Q6OmVudW0yYikpOwotCi0gICAgQk9PU1RfVEVTVChoYXNoMyh0ZXN0OjplbnVtM2EpID09IGhhc2gzKHRlc3Q6OmVudW0zYSkpOwotICAgIEJPT1NUX1RFU1QoaGFzaDModGVzdDo6ZW51bTNhKSAhPSBoYXNoMyh0ZXN0OjplbnVtM2IpKTsKLSAgICBCT09TVF9URVNUKGhhc2gzKHRlc3Q6OmVudW0zYikgPT0gaGFzaDModGVzdDo6ZW51bTNiKSk7Ci0KLSAgICBCT09TVF9URVNUKGhhc2g0KHRlc3Q6OmVudW00YSkgPT0gaGFzaDQodGVzdDo6ZW51bTRhKSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoNCh0ZXN0OjplbnVtNGEpICE9IGhhc2g0KHRlc3Q6OmVudW00YikpOwotICAgIEJPT1NUX1RFU1QoaGFzaDQodGVzdDo6ZW51bTRiKSA9PSBoYXNoNCh0ZXN0OjplbnVtNGIpKTsKLQotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6ZW51bV9vdmVycmlkZT4gaGFzaF9vdmVycmlkZTsKLQotICAgIEJPT1NUX1RFU1QoaGFzaF9vdmVycmlkZSh0ZXN0OjplbnVtX292ZXJyaWRlMSkgPT0KLSAgICAgICAgaGFzaF9vdmVycmlkZSh0ZXN0OjplbnVtX292ZXJyaWRlMSkpOwotICAgIEJPT1NUX1RFU1QoaGFzaF9vdmVycmlkZSh0ZXN0OjplbnVtX292ZXJyaWRlMSkgPT0KLSAgICAgICAgaGFzaF9vdmVycmlkZSh0ZXN0OjplbnVtX292ZXJyaWRlMikpOwotICAgIEJPT1NUX1RFU1QoaGFzaF9vdmVycmlkZSh0ZXN0OjplbnVtX292ZXJyaWRlMSkgPT0KLSAgICAgICAgaGFzaF9vdmVycmlkZSh0ZXN0OjplbnVtX292ZXJyaWRlMSkpOwotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Y2Q1MDguLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiaGFzaF9mbG9hdF90ZXN0LmhwcCIKLQotaW50IG1haW4oKQotewotICAgIHN0ZDo6Y2Vycjw8IkNvbXBpbGVyOiAiPDxCT09TVF9DT01QSUxFUjw8IlxuIjsKLSAgICBzdGQ6OmNlcnI8PCJQbGF0Zm9ybTogIjw8Qk9PU1RfUExBVEZPUk08PCJcbiI7Ci0gICAgc3RkOjpjZXJyPDwiTGlicmFyeTogIjw8Qk9PU1RfU1RETElCPDwiXG5cbiI7Ci0KLSAgICBmbG9hdF90ZXN0cygiZmxvYXQiLCAoZmxvYXQqKSAwKTsKLSAgICBmbG9hdF90ZXN0cygiZG91YmxlIiwgKGRvdWJsZSopIDApOwotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NjkzYTkuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotCi0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoL2RldGFpbC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWwvZmxvYXRfZnVuY3Rpb25zLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykgICAvLyBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NzIzKSAgIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKLSNpZiBCT09TVF9NU1ZDIDwgMTQwMAotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI2NykgICAvLyBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ3Vuc2lnbmVkIGludCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVxdWFsIgotI2VuZGlmCi0KLWNoYXIgY29uc3QqIGZsb2F0X3R5cGUoZmxvYXQqKSB7IHJldHVybiAiZmxvYXQiOyB9Ci1jaGFyIGNvbnN0KiBmbG9hdF90eXBlKGRvdWJsZSopIHsgcmV0dXJuICJkb3VibGUiOyB9Ci1jaGFyIGNvbnN0KiBmbG9hdF90eXBlKGxvbmcgZG91YmxlKikgeyByZXR1cm4gImxvbmcgZG91YmxlIjsgfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgZmxvYXRfdGVzdHMoY2hhciBjb25zdCogbmFtZSwgVCogPSAwKQotewotICAgIHN0ZDo6Y2VycgotICAgICAgICA8PCAgIlxuIgotICAgICAgICA8PCAgIlRlc3RpbmcgIiBCT09TVF9TVFJJTkdJWkUoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRSkgIjo6aGFzaDwiCi0gICAgICAgIDw8ICBuYW1lCi0gICAgICAgIDw8ICAiPlxuIgotICAgICAgICA8PCAgIlxuIgotICAgICAgICA8PCAgIm5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkaWdpdHMgPSAiCi0gICAgICAgIDw8ICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGlnaXRzPDwgIlxuIgotICAgICAgICA8PCAgIm5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPGludD46OmRpZ2l0cyA9ICIKLSAgICAgICAgPDwgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPGludD46OmRpZ2l0czw8ICJcbiIKLSAgICAgICAgPDwgICJuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxzdGQ6OnNpemVfdD46OmRpZ2l0cyA9ICIKLSAgICAgICAgPDwgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPHN0ZDo6c2l6ZV90Pjo6ZGlnaXRzCi0gICAgICAgIDw8ICAiXG4iCi0gICAgICAgIDw8ICAiXG4iCi0gICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2xkZXhwPFQ+OjpmbG9hdF90eXBlID0gIgotICAgICAgICA8PCAgZmxvYXRfdHlwZShzdGF0aWNfY2FzdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FCi0gICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2xkZXhwPFQ+OjpmbG9hdF90eXBlKj4oMCkpCi0gICAgICAgIDw8ICAiXG4iCi0gICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2ZyZXhwPFQ+OjpmbG9hdF90eXBlID0gIgotICAgICAgICA8PCAgZmxvYXRfdHlwZShzdGF0aWNfY2FzdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FCi0gICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2ZyZXhwPFQ+OjpmbG9hdF90eXBlKj4oMCkpCi0gICAgICAgIDw8ICAiXG4iCi0gICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpzZWxlY3RfaGFzaF90eXBlPFQ+Ojp0eXBlID0gIgotICAgICAgICA8PCAgZmxvYXRfdHlwZShzdGF0aWNfY2FzdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FCi0gICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpzZWxlY3RfaGFzaF90eXBlPFQ+Ojp0eXBlKj4oMCkpCi0gICAgICAgIDw8ICAiXG4iCi0gICAgICAgIDw8ICAiXG4iCi0gICAgICAgIDsKLQotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDE7Ci0KLSAgICBUIHplcm8gPSAwOwotICAgIFQgbWludXNfemVybyA9IChUKSAtMSAqIHplcm87Ci0KLSAgICBCT09TVF9URVNUKHplcm8gPT0gbWludXNfemVybyk7Ci0gICAgQk9PU1RfVEVTVCh4MSh6ZXJvKSA9PSB4MShtaW51c196ZXJvKSk7Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotICAgIEJPT1NUX1RFU1QoeDEoemVybykgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh6ZXJvKSk7Ci0gICAgQk9PU1RfVEVTVCh4MShtaW51c196ZXJvKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1pbnVzX3plcm8pKTsKLSNlbmRpZgotCi0gICAgQk9PU1RfVEVTVCh4MSh6ZXJvKSAhPSB4MSgwLjUpKTsKLSAgICBCT09TVF9URVNUKHgxKG1pbnVzX3plcm8pICE9IHgxKDAuNSkpOwotICAgIEJPT1NUX1RFU1QoeDEoMC41KSAhPSB4MSgtMC41KSk7Ci0gICAgQk9PU1RfVEVTVCh4MSgxKSAhPSB4MSgtMSkpOwotCi0gICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotLy8gRG9pbmcgYW55dGhpbmcgd2l0aCBpbmZpbml0eSBjYXVzZXMgYm9ybGFuZCB0byBjcmFzaC4KLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSAgICBzdGQ6OmNlcnIKLSAgICAgICAgPDwgICJOb3QgcnVubmluZyBpbmZpbml0eSBjaGVja3Mgb24gQm9ybGFuZCwgYXMgaXQgY2F1c2VzIGl0IHRvIGNyYXNoLiIKLSAgICAgICAgICAgICJcbiI7Ci0jZWxzZQotICAgIGlmKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpoYXNfaW5maW5pdHkpIHsKLSAgICAgICAgVCBpbmZpbml0eSA9IC1sb2coemVybyk7Ci0gICAgICAgIFQgaW5maW5pdHkyID0gKFQpIDEuIC8gemVybzsKLSAgICAgICAgVCBpbmZpbml0eTMgPSAoVCkgLTEuIC8gbWludXNfemVybzsKLSAgICAgICAgVCBpbmZpbml0eTQgPSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aW5maW5pdHkoKTsKLQotICAgICAgICBUIG1pbnVzX2luZmluaXR5ID0gbG9nKHplcm8pOwotICAgICAgICBUIG1pbnVzX2luZmluaXR5MiA9IChUKSAtMS4gLyB6ZXJvOwotICAgICAgICBUIG1pbnVzX2luZmluaXR5MyA9IChUKSAxLiAvIG1pbnVzX3plcm87Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotICAgICAgICBCT09TVF9URVNUKHgxKGluZmluaXR5KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGluZmluaXR5KSk7Ci0gICAgICAgIEJPT1NUX1RFU1QoeDEobWludXNfaW5maW5pdHkpCi0gICAgICAgICAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtaW51c19pbmZpbml0eSkpOwotI2VuZGlmCi0KLSAgICAgICAgaWYoaW5maW5pdHkgPT0gaW5maW5pdHkyKQotICAgICAgICAgICAgQk9PU1RfVEVTVCh4MShpbmZpbml0eSkgPT0geDEoaW5maW5pdHkyKSk7Ci0gICAgICAgIGlmKGluZmluaXR5ID09IGluZmluaXR5MykKLSAgICAgICAgICAgIEJPT1NUX1RFU1QoeDEoaW5maW5pdHkpID09IHgxKGluZmluaXR5MykpOwotICAgICAgICBpZihpbmZpbml0eSA9PSBpbmZpbml0eTQpCi0gICAgICAgICAgICBCT09TVF9URVNUKHgxKGluZmluaXR5KSA9PSB4MShpbmZpbml0eTQpKTsKLQotICAgICAgICBpZihtaW51c19pbmZpbml0eSA9PSBtaW51c19pbmZpbml0eTIpCi0gICAgICAgICAgICBCT09TVF9URVNUKHgxKG1pbnVzX2luZmluaXR5KSA9PSB4MShtaW51c19pbmZpbml0eTIpKTsKLSAgICAgICAgaWYobWludXNfaW5maW5pdHkgPT0gbWludXNfaW5maW5pdHkzKQotICAgICAgICAgICAgQk9PU1RfVEVTVCh4MShtaW51c19pbmZpbml0eSkgPT0geDEobWludXNfaW5maW5pdHkzKSk7Ci0KLSAgICAgICAgQk9PU1RfVEVTVChpbmZpbml0eSAhPSBtaW51c19pbmZpbml0eSk7Ci0KLSAgICAgICAgaWYoeDEoaW5maW5pdHkpID09IHgxKG1pbnVzX2luZmluaXR5KSkgewotICAgICAgICAgICAgc3RkOjpjZXJyPDwieDEoaW5maW5pdHkpID09IHgxKC1pbmZpbml0eSkgPT0gIjw8eDEoaW5maW5pdHkpPDwiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgcmVhbGx5IGJlICdoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50JyBidXQgc29tZQotICAgICAgICAvLyBjb21waWxlcnMgZG9uJ3QgaGF2ZSAnZGVub3JtX3ByZXNlbnQnLiBTZWUgYWxzbyBhIGxhdGVyIHVzZS4KLSAgICAgICAgaWYobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46Omhhc19kZW5vcm0pIHsKLSAgICAgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpID09IHgxKGluZmluaXR5KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKLSAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShkZW5vcm1fbWluKSA9PSB4MShpbmZpbml0eSkgPT0gIgotICAgICAgICAgICAgICAgICAgICA8PCAgeDEoaW5maW5pdHkpCi0gICAgICAgICAgICAgICAgICAgIDw8ICAiXG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSA9PQotICAgICAgICAgICAgICAgIHgxKG1pbnVzX2luZmluaXR5KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKLSAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShkZW5vcm1fbWluKSA9PSB4MSgtaW5maW5pdHkpID09ICIKLSAgICAgICAgICAgICAgICAgICAgPDwgIHgxKG1pbnVzX2luZmluaXR5KQotICAgICAgICAgICAgICAgICAgICA8PCAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpoYXNfcXVpZXRfTmFOKSB7Ci0gICAgICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpID09IHgxKGluZmluaXR5KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKLSAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShxdWlldF9OYU4pID09IHgxKGluZmluaXR5KSA9PSAiCi0gICAgICAgICAgICAgICAgICAgIDw8ICB4MShpbmZpbml0eSkKLSAgICAgICAgICAgICAgICAgICAgPDwgICJcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpxdWlldF9OYU4oKSkgPT0KLSAgICAgICAgICAgICAgICB4MShtaW51c19pbmZpbml0eSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RkOjpjZXJyCi0gICAgICAgICAgICAgICAgICAgIDw8ICAieDEocXVpZXRfTmFOKSA9PSB4MSgtaW5maW5pdHkpID09ICIKLSAgICAgICAgICAgICAgICAgICAgPDwgIHgxKG1pbnVzX2luZmluaXR5KQotICAgICAgICAgICAgICAgICAgICA8PCAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgVCBtYXggPSAobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46Om1heCkoKTsKLSAgICBUIGhhbGZfbWF4ID0gbWF4IC8gMjsKLSAgICBUIHF1YXJ0ZXJfbWF4ID0gbWF4IC8gNDsKLSAgICBUIHRocmVlX3F1YXJ0ZXJfbWF4ID0gbWF4IC0gcXVhcnRlcl9tYXg7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhlIGxpbWl0czo6bWF4IGlzIGluIHJhbmdlLgotICAgIEJPT1NUX1RFU1QobWF4ICE9IGhhbGZfbWF4KTsKLSAgICBCT09TVF9URVNUKG1heCAhPSBxdWFydGVyX21heCk7Ci0gICAgQk9PU1RfVEVTVChtYXggIT0gdGhyZWVfcXVhcnRlcl9tYXgpOwotICAgIEJPT1NUX1RFU1QoaGFsZl9tYXggIT0gcXVhcnRlcl9tYXgpOwotICAgIEJPT1NUX1RFU1QoaGFsZl9tYXggIT0gdGhyZWVfcXVhcnRlcl9tYXgpOwotICAgIEJPT1NUX1RFU1QocXVhcnRlcl9tYXggIT0gdGhyZWVfcXVhcnRlcl9tYXgpOwotCi0gICAgQk9PU1RfVEVTVChtYXggIT0gLW1heCk7Ci0gICAgQk9PU1RfVEVTVChoYWxmX21heCAhPSAtaGFsZl9tYXgpOwotICAgIEJPT1NUX1RFU1QocXVhcnRlcl9tYXggIT0gLXF1YXJ0ZXJfbWF4KTsKLSAgICBCT09TVF9URVNUKHRocmVlX3F1YXJ0ZXJfbWF4ICE9IC10aHJlZV9xdWFydGVyX21heCk7Ci0KLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCi0gICAgQk9PU1RfVEVTVCh4MShtYXgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUobWF4KSk7Ci0gICAgQk9PU1RfVEVTVCh4MShoYWxmX21heCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShoYWxmX21heCkpOwotICAgIEJPT1NUX1RFU1QoeDEocXVhcnRlcl9tYXgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUocXVhcnRlcl9tYXgpKTsKLSAgICBCT09TVF9URVNUKHgxKHRocmVlX3F1YXJ0ZXJfbWF4KSA9PQotICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHRocmVlX3F1YXJ0ZXJfbWF4KSk7Ci0jZW5kaWYKLQotICAgIC8vIFRoZSAnIT0nIHRlc3RzIGNvdWxkIGxlZ2l0aW1hdGVseSBmYWlsLCBidXQgd2l0aCBteSBoYXNoIGl0IGluZGljYXRlcyBhCi0gICAgLy8gYnVnLgotICAgIEJPT1NUX1RFU1QoeDEobWF4KSA9PSB4MShtYXgpKTsKLSAgICBCT09TVF9URVNUKHgxKG1heCkgIT0geDEocXVhcnRlcl9tYXgpKTsKLSAgICBCT09TVF9URVNUKHgxKG1heCkgIT0geDEoaGFsZl9tYXgpKTsKLSAgICBCT09TVF9URVNUKHgxKG1heCkgIT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKLSAgICBCT09TVF9URVNUKHgxKHF1YXJ0ZXJfbWF4KSA9PSB4MShxdWFydGVyX21heCkpOwotICAgIEJPT1NUX1RFU1QoeDEocXVhcnRlcl9tYXgpICE9IHgxKGhhbGZfbWF4KSk7Ci0gICAgQk9PU1RfVEVTVCh4MShxdWFydGVyX21heCkgIT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKLSAgICBCT09TVF9URVNUKHgxKGhhbGZfbWF4KSA9PSB4MShoYWxmX21heCkpOwotICAgIEJPT1NUX1RFU1QoeDEoaGFsZl9tYXgpICE9IHgxKHRocmVlX3F1YXJ0ZXJfbWF4KSk7Ci0gICAgQk9PU1RfVEVTVCh4MSh0aHJlZV9xdWFydGVyX21heCkgPT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKLQotICAgIEJPT1NUX1RFU1QoeDEobWF4KSAhPSB4MSgtbWF4KSk7Ci0gICAgQk9PU1RfVEVTVCh4MShoYWxmX21heCkgIT0geDEoLWhhbGZfbWF4KSk7Ci0gICAgQk9PU1RfVEVTVCh4MShxdWFydGVyX21heCkgIT0geDEoLXF1YXJ0ZXJfbWF4KSk7Ci0gICAgQk9PU1RfVEVTVCh4MSh0aHJlZV9xdWFydGVyX21heCkgIT0geDEoLXRocmVlX3F1YXJ0ZXJfbWF4KSk7Ci0KLQotLy8gSW50ZWwgd2l0aCBnY2Mgc3RkbGliIHNvbWV0aW1lcyBzZWdmYXVsdHMgb24gY2FsbHMgdG8gYXNpbiBhbmQgYWNvcy4KLSNpZiAhKChkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19JQ0wpIHx8IFwKLSAgICAgICAgZGVmaW5lZChfX0lDQykgfHwgZGVmaW5lZChfX0VDQykpICYmIFwKLSAgICAoZGVmaW5lZChfX0dMSUJDUFBfXykgfHwgZGVmaW5lZChfX0dMSUJDWFhfXykpKQotICAgIFQgdjEgPSBhc2luKChUKSAxKTsKLSAgICBUIHYyID0gYWNvcygoVCkgMCk7Ci0gICAgaWYodjEgPT0gdjIpCi0gICAgICAgIEJPT1NUX1RFU1QoeDEodjEpID09IHgxKHYyKSk7Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotICAgIEJPT1NUX1RFU1QoeDEodjEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodjEpKTsKLSAgICBCT09TVF9URVNUKHgxKHYyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHYyKSk7Ci0jZW5kaWYKLSAgICAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLSAgICBCT09TVF9URVNUKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09Ci0gICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKAotICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpKTsKLSNlbmRpZgotCi0gICAgQk9PU1RfVEVTVChuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpICE9IChUKSAwKTsKLSAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMCkpCi0gICAgICAgIHN0ZDo6Y2Vycjw8IngxKGVwc2lsb24pID09IHgxKDApID09ICI8PHgxKChUKSAwKTw8IlxuIjsKLQotICAgIEJPT1NUX1RFU1QoLW5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkgIT0gKFQpIDApOwotICAgIGlmKHgxKC1uZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMCkpCi0gICAgICAgIHN0ZDo6Y2Vycjw8IngxKC1lcHNpbG9uKSA9PSB4MSgwKSA9PSAiPDx4MSgoVCkgMCk8PCJcbiI7Ci0KLSAgICBCT09TVF9URVNUKChUKSAxICsgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSAhPSAoVCkgMSk7Ci0gICAgaWYoeDEoKFQpIDEgKyBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMSkpCi0gICAgICAgIHN0ZDo6Y2Vycjw8IngxKDEgKyBlcHNpbG9uKSA9PSB4MSgxKSA9PSAiPDx4MSgoVCkgMSk8PCJcbiI7Ci0KLSAgICBCT09TVF9URVNUKChUKSAxIC0gbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSAhPSAoVCkgMSk7Ci0gICAgaWYoeDEoKFQpIDEgLSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMSkpCi0gICAgICAgIHN0ZDo6Y2Vycjw8IngxKDEgLSBlcHNpbG9uKSA9PSB4MSgxKSA9PSAiPDx4MSgoVCkgMSk8PCJcbiI7Ci0KLSAgICBCT09TVF9URVNUKChUKSAtMSArIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkgIT0gKFQpIC0xKTsKLSAgICBpZih4MSgoVCkgLTEgKyBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgLTEpKQotICAgICAgICBzdGQ6OmNlcnI8PCJ4MSgtMSArIGVwc2lsb24pID09IHgxKC0xKSA9PSAiPDx4MSgoVCkgLTEpPDwiXG4iOwotCi0gICAgQk9PU1RfVEVTVCgoVCkgLTEgLSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpICE9IChUKSAtMSk7Ci0gICAgaWYoeDEoKFQpIC0xIC0gbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSkgPT0geDEoKFQpIC0xKSkKLSAgICAgICAgc3RkOjpjZXJyPDwieDEoLTEgLSBlcHNpbG9uKSA9PSB4MSgtMSkgPT0gIjw8eDEoKFQpIC0xKTw8IlxuIjsKLQotICAgIC8vIEFzIGJlZm9yZS4KLSAgICBpZihuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aGFzX2Rlbm9ybSkgewotICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSA9PSB4MSh6ZXJvKSkgewotICAgICAgICAgICAgc3RkOjpjZXJyPDwieDEoZGVub3JtX21pbikgPT0geDEoemVybykgPT0gIjw8eDEoemVybyk8PCJcbiI7Ci0gICAgICAgIH0KLSNpZiAhQk9PU1RfV09SS0FST1VORChfX0RFQ0NYWF9WRVIsPDcwMTkwMDA2KSAmJiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotICAgICAgICAvLyBUaGUgVHJ1NjQvQ1hYIHN0YW5kYXJkIGxpYnJhcnkgcHJpb3IgdG8gNy4xIGNvbnRhaW5zIGEgYnVnIGluIHRoZQotICAgICAgICAvLyBzcGVjaWFsaXphdGlvbiBvZiBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czo6ZGVub3JtX21pbigpIGZvciBsb25nCi0gICAgICAgIC8vIGRvdWJsZXMgd2hpY2ggY2F1c2VzIHRoaXMgdGVzdCB0byBmYWlsLgotICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSAhPQotICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgKLSAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RkOjpjZXJyCi0gICAgICAgICAgICAgICAgPDwgICJ4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSA9ICIKLSAgICAgICAgICAgICAgICA8PCAgeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmRlbm9ybV9taW4oKSkKLSAgICAgICAgICAgICAgICA8PCAgIlxuaGFzaF92YWx1ZShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSIKLSAgICAgICAgICAgICAgICAgICAgIiA9ICIKLSAgICAgICAgICAgICAgICA8PCAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpCi0gICAgICAgICAgICAgICAgPDwgICJcbngxKDApID0gIgotICAgICAgICAgICAgICAgIDw8ICB4MSgwKQotICAgICAgICAgICAgICAgIDw8ICAiXG4iOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLS8vIE5hTiBhbHNvIGNhdXNlcyBib3JsYW5kIHRvIGNyYXNoLgotI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLSAgICBpZihuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aGFzX3F1aWV0X05hTikgewotICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpID09IHgxKDEuMCkpIHsKLSAgICAgICAgICAgIHN0ZDo6Y2Vycjw8IngxKHF1aWV0X05hTikgPT0geDEoMS4wKSA9PSAiPDx4MSgxLjApPDwiXG4iOwotICAgICAgICB9Ci0gICAgICAgIEJPT1NUX1RFU1QoeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OnF1aWV0X05hTigpKSA9PQotICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgKLSAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mcmllbmRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZnJpZW5kX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmI5MTMwLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mcmllbmRfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi1uYW1lc3BhY2UgdGVzdAotewotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHN0cnVjdCBjdXN0b20KLSAgICB7Ci0gICAgICAgIGludCB2YWx1ZV87Ci0KLSAgICAgICAgc3RkOjpzaXplX3QgaGFzaCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZV8gKiAxMDsKLSAgICAgICAgfQotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKLSAgICAgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tIGNvbnN0JiB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geC5oYXNoKCk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGN1c3RvbShpbnQgeCkgOiB2YWx1ZV8oeCkge30KLSAgICB9OwotfQotCi0jaWYgZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQotbmFtZXNwYWNlIG5kbmJvb3N0Ci17Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZSh0ZXN0OjpjdXN0b208VD4geCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4Lmhhc2goKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0jICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jICBlbHNlCi0jICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxjY3R5cGU+Ci0KLXZvaWQgY3VzdG9tX3Rlc3RzKCkKLXsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmN1c3RvbTxpbnQ+ID4gY3VzdG9tX2hhc2hlcjsKLSAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoMTApID09IDEwMHUpOwotICAgIHRlc3Q6OmN1c3RvbTxpbnQ+IHgoNTUpOwotICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcih4KSA9PSA1NTB1KTsKLQotICAgIHsKLSAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U7Ci0gICAgICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcih4KSA9PSBoYXNoX3ZhbHVlKHgpKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnZlY3Rvcjx0ZXN0OjpjdXN0b208aW50PiA+IGN1c3RvbV92ZWN0b3I7Ci0gICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soNSk7Ci0gICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soMjUpOwotICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDM1KTsKLQotICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCB0ZXN0OjpjdXN0b208aW50Pig1KSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbTxpbnQ+KDI1KSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbTxpbnQ+KDM1KSk7Ci0KLSAgICBzdGQ6OnNpemVfdCBzZWVkMiA9IDA7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCA1MHUpOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgMjUwdSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCAzNTB1KTsKLQotICAgIEJPT1NUX1RFU1Qoc2VlZCA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKAotICAgICAgICBjdXN0b21fdmVjdG9yLmJlZ2luKCksIGN1c3RvbV92ZWN0b3IuZW5kKCkpKTsKLSAgICBCT09TVF9URVNUKHNlZWQgPT0gc2VlZDIpOwotfQotCi0jZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLQotaW50IG1haW4oKQotewotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0gICAgY3VzdG9tX3Rlc3RzKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mdW5jdGlvbl9wb2ludGVyX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z1bmN0aW9uX3BvaW50ZXJfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNzhjYzMuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z1bmN0aW9uX3BvaW50ZXJfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLSNpbmNsdWRlICIuL2NvbXBpbGVfdGltZS5ocHAiCi0KLXZvaWQgdm9pZF9mdW5jMSgpIHsgc3RhdGljIGludCB4ID0gMTsgKyt4OyB9Ci12b2lkIHZvaWRfZnVuYzIoKSB7IHN0YXRpYyBpbnQgeCA9IDI7IC0teDsgfQotaW50IGludF9mdW5jMShpbnQpIHsgcmV0dXJuIDA7IH0KLWludCBpbnRfZnVuYzIoaW50KSB7IHJldHVybiAxOyB9Ci0KLXZvaWQgZnVuY3Rpb25fcG9pbnRlcl90ZXN0cygpCi17Ci0gICAgY29tcGlsZV90aW1lX3Rlc3RzKCh2b2lkKCoqKSgpKSAwKTsKLSAgICBjb21waWxlX3RpbWVfdGVzdHMoKGludCgqKikoaW50KSkgMCk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHZvaWQoKikoKT4gaGFzaGVyX3ZvaWQ7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnQoKikoaW50KT4gaGFzaGVyX2ludDsKLQotICAgIEJPT1NUX1RFU1QoJnZvaWRfZnVuYzEgIT0gJnZvaWRfZnVuYzIpOwotICAgIEJPT1NUX1RFU1QoJmludF9mdW5jMSAhPSAmaW50X2Z1bmMyKTsKLQotICAgIEJPT1NUX1RFU1QoaGFzaGVyX3ZvaWQoMCkgPT0gaGFzaGVyX3ZvaWQoMCkpOwotICAgIEJPT1NUX1RFU1QoaGFzaGVyX3ZvaWQoJnZvaWRfZnVuYzEpID09IGhhc2hlcl92b2lkKCZ2b2lkX2Z1bmMxKSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXJfdm9pZCgmdm9pZF9mdW5jMSkgIT0gaGFzaGVyX3ZvaWQoJnZvaWRfZnVuYzIpKTsKLSAgICBCT09TVF9URVNUKGhhc2hlcl92b2lkKCZ2b2lkX2Z1bmMxKSAhPSBoYXNoZXJfdm9pZCgwKSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KDApID09IGhhc2hlcl9pbnQoMCkpOwotICAgIEJPT1NUX1RFU1QoaGFzaGVyX2ludCgmaW50X2Z1bmMxKSA9PSBoYXNoZXJfaW50KCZpbnRfZnVuYzEpKTsKLSAgICBCT09TVF9URVNUKGhhc2hlcl9pbnQoJmludF9mdW5jMSkgIT0gaGFzaGVyX2ludCgmaW50X2Z1bmMyKSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KCZpbnRfZnVuYzEpICE9IGhhc2hlcl9pbnQoMCkpOwotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCi0gICAgQk9PU1RfVEVTVChoYXNoZXJfdm9pZCgmdm9pZF9mdW5jMSkKLSAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJnZvaWRfZnVuYzEpKTsKLSAgICBCT09TVF9URVNUKGhhc2hlcl9pbnQoJmludF9mdW5jMSkKLSAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJmludF9mdW5jMSkpOwotCi0gICAgLy8gVGhpcyBpc24ndCBzcGVjaWZpZWQgaW4gUGV0ZXIncyBwcm9wb3NhbDoKLSAgICBCT09TVF9URVNUKGhhc2hlcl92b2lkKDApID09IDApOwotI2VuZGlmCi19Ci0KLWludCBtYWluKCkKLXsKLSAgICBmdW5jdGlvbl9wb2ludGVyX3Rlc3RzKCk7Ci0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdC5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQwMTdjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUykKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2hfZndkLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSB0ZXN0IHsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHN0cnVjdCB0ZXN0X3R5cGUxCi0gICAgewotICAgICAgICBUIHZhbHVlOwotICAgICAgICB0ZXN0X3R5cGUxKFQgY29uc3QmIHgpIDogdmFsdWUoeCkge30KLSAgICB9OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3RfdHlwZTE8VD4gY29uc3QmIHgpCi0gICAgewotICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IGhhc2hlcjsKLSAgICAgICAgcmV0dXJuIGhhc2hlcih4LnZhbHVlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHN0cnVjdCB0ZXN0X3R5cGUyCi0gICAgewotICAgICAgICBUIHZhbHVlMSwgdmFsdWUyOwotICAgICAgICB0ZXN0X3R5cGUyKFQgY29uc3QmIHgsIFQgY29uc3QmIHkpIDogdmFsdWUxKHgpLCB2YWx1ZTIoeSkge30KLSAgICB9OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3RfdHlwZTI8VD4gY29uc3QmIHgpCi0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUxKTsKLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUyKTsKLSAgICAgICAgcmV0dXJuIHNlZWQ7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdHJ1Y3QgdGVzdF90eXBlMwotICAgIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8VD4gdmFsdWVzOwotICAgICAgICB0ZXN0X3R5cGUzKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvciB4LAotICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvciB5KSA6IHZhbHVlcyh4LCB5KSB7fQotICAgIH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdF90eXBlMzxUPiBjb25zdCYgeCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPQotICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LnZhbHVlcy5iZWdpbigpLCB4LnZhbHVlcy5lbmQoKSk7Ci0gICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2Uoc2VlZCwgeC52YWx1ZXMuYmVnaW4oKSwgeC52YWx1ZXMuZW5kKCkpOwotICAgICAgICByZXR1cm4gc2VlZDsKLSAgICB9Ci0jZW5kaWYKLQotfQotCi0jaWYgZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQotCi1uYW1lc3BhY2UgbmRuYm9vc3QKLXsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3Q6OnRlc3RfdHlwZTE8VD4gY29uc3QmIHgpCi0gICAgewotICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IGhhc2hlcjsKLSAgICAgICAgcmV0dXJuIGhhc2hlcih4LnZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3Q6OnRlc3RfdHlwZTI8VD4gY29uc3QmIHgpCi0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUxKTsKLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUyKTsKLSAgICAgICAgcmV0dXJuIHNlZWQ7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZSh0ZXN0Ojp0ZXN0X3R5cGUzPFQ+IGNvbnN0JiB4KQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3Qgc2VlZCA9Ci0gICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHgudmFsdWVzLmJlZ2luKCksIHgudmFsdWVzLmVuZCgpKTsKLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkLCB4LnZhbHVlcy5iZWdpbigpLCB4LnZhbHVlcy5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBzZWVkOwotICAgIH0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzEuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2YxNjY1Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdF8xLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gVGhpcyBjaGVja3MgdGhhdCB0ZW1wbGF0ZSBjb2RlIGltcGxlbWVudGVkIHVzaW5nIGhhc2hfZndkIHdpbGwgd29yay4KLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2luY2x1ZGUgIi4vaGFzaF9md2RfdGVzdC5ocHAiCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTKQotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXZvaWQgZndkX3Rlc3QxKCkKLXsKLSAgICB0ZXN0Ojp0ZXN0X3R5cGUxPGludD4geCg1KTsKLSAgICB0ZXN0Ojp0ZXN0X3R5cGUxPHN0ZDo6c3RyaW5nPiB5KCJUZXN0Iik7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludD4gaGFzaGVyX2ludDsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6c3RyaW5nPiBoYXNoZXJfc3RyaW5nOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6dGVzdF90eXBlMTxpbnQ+ID4gaGFzaGVyX3Rlc3RfaW50OwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6dGVzdF90eXBlMTxzdGQ6OnN0cmluZz4gPiBoYXNoZXJfdGVzdF9zdHJpbmc7Ci0KLSAgICBCT09TVF9URVNUKGhhc2hlcl9pbnQoNSkgPT0gaGFzaGVyX3Rlc3RfaW50KHgpKTsKLSAgICBCT09TVF9URVNUKGhhc2hlcl9zdHJpbmcoIlRlc3QiKSA9PSBoYXNoZXJfdGVzdF9zdHJpbmcoeSkpOwotfQotCi12b2lkIGZ3ZF90ZXN0MigpCi17Ci0gICAgdGVzdDo6dGVzdF90eXBlMjxpbnQ+IHgoNSwgMTApOwotICAgIHRlc3Q6OnRlc3RfdHlwZTI8c3RkOjpzdHJpbmc+IHkoIlRlc3QxIiwgIlRlc3QyIik7Ci0KLSAgICBzdGQ6OnNpemVfdCBzZWVkMSA9IDA7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQxLCA1KTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDEsIDEwKTsKLQotICAgIHN0ZDo6c2l6ZV90IHNlZWQyID0gMDsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIHN0ZDo6c3RyaW5nKCJUZXN0MSIpKTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIHN0ZDo6c3RyaW5nKCJUZXN0MiIpKTsKLQotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6dGVzdF90eXBlMjxpbnQ+ID4gaGFzaGVyX3Rlc3RfaW50OwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6dGVzdF90eXBlMjxzdGQ6OnN0cmluZz4gPiBoYXNoZXJfdGVzdF9zdHJpbmc7Ci0KLSAgICBCT09TVF9URVNUKHNlZWQxID09IGhhc2hlcl90ZXN0X2ludCh4KSk7Ci0gICAgQk9PU1RfVEVTVChzZWVkMiA9PSBoYXNoZXJfdGVzdF9zdHJpbmcoeSkpOwotfQotCi12b2lkIGZ3ZF90ZXN0MygpCi17Ci0gICAgc3RkOjp2ZWN0b3I8aW50PiB2YWx1ZXMxOwotICAgIHZhbHVlczEucHVzaF9iYWNrKDEwKTsKLSAgICB2YWx1ZXMxLnB1c2hfYmFjaygxNSk7Ci0gICAgdmFsdWVzMS5wdXNoX2JhY2soMjApOwotICAgIHZhbHVlczEucHVzaF9iYWNrKDMpOwotCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHZhbHVlczI7Ci0gICAgdmFsdWVzMi5wdXNoX2JhY2soIkNoaWNvIik7Ci0gICAgdmFsdWVzMi5wdXNoX2JhY2soIkdyb3VjaG8iKTsKLSAgICB2YWx1ZXMyLnB1c2hfYmFjaygiSGFycG8iKTsKLSAgICB2YWx1ZXMyLnB1c2hfYmFjaygiR3VtbW8iKTsKLSAgICB2YWx1ZXMyLnB1c2hfYmFjaygiWmVwcG8iKTsKLQotICAgIHRlc3Q6OnRlc3RfdHlwZTM8aW50PiB4KHZhbHVlczEuYmVnaW4oKSwgdmFsdWVzMS5lbmQoKSk7Ci0gICAgdGVzdDo6dGVzdF90eXBlMzxzdGQ6OnN0cmluZz4geSh2YWx1ZXMyLmJlZ2luKCksIHZhbHVlczIuZW5kKCkpOwotCi0gICAgc3RkOjpzaXplX3Qgc2VlZDEgPQotICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczEuYmVnaW4oKSwgdmFsdWVzMS5lbmQoKSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkMSwgdmFsdWVzMS5iZWdpbigpLCB2YWx1ZXMxLmVuZCgpKTsKLQotICAgIHN0ZDo6c2l6ZV90IHNlZWQyID0KLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMyLmJlZ2luKCksIHZhbHVlczIuZW5kKCkpOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2Uoc2VlZDIsIHZhbHVlczIuYmVnaW4oKSwgdmFsdWVzMi5lbmQoKSk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OnRlc3RfdHlwZTM8aW50PiA+IGhhc2hlcl90ZXN0X2ludDsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OnRlc3RfdHlwZTM8c3RkOjpzdHJpbmc+ID4gaGFzaGVyX3Rlc3Rfc3RyaW5nOwotCi0gICAgQk9PU1RfVEVTVChzZWVkMSA9PSBoYXNoZXJfdGVzdF9pbnQoeCkpOwotICAgIEJPT1NUX1RFU1Qoc2VlZDIgPT0gaGFzaGVyX3Rlc3Rfc3RyaW5nKHkpKTsKLX0KLQotI2VuZGlmCi0KLWludCBtYWluKCkKLXsKLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotICAgIGZ3ZF90ZXN0MSgpOwotICAgIGZ3ZF90ZXN0MigpOwotICAgIGZ3ZF90ZXN0MygpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3RfMi5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3RfMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Zjk4ZjQuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBUaGlzIHRlc3QganVzdCBtYWtlcyBzdXJlIGEgaGVhZGVyIHdoaWNoIHVzZXMgaGFzaF9md2QgY2FuIGNvbXBpbGUgd2l0aG91dAotLy8gdGhlIG1haW4gaGFzaCBoZWFkZXJzLgotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpIHx8IGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUykKLQotaW50IG1haW4oKSB7fQotCi0jZWxzZQotCi0jaW5jbHVkZSAiLi9oYXNoX2Z3ZF90ZXN0LmhwcCIKLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIHVudXNlZChUIGNvbnN0Jikge30KLQotdm9pZCBmd2RfdGVzdCgpCi17Ci0gICAgdGVzdDo6dGVzdF90eXBlMTxpbnQ+IHgxKDMpOwotICAgIHRlc3Q6OnRlc3RfdHlwZTE8c3RkOjpzdHJpbmc+IHkxKCJCbGFjayIpOwotICAgIHRlc3Q6OnRlc3RfdHlwZTI8aW50PiB4MigyNSwgMTYpOwotICAgIHRlc3Q6OnRlc3RfdHlwZTI8c3RkOjpzdHJpbmc+IHkyKCJXaGl0ZSIsICJHcmVlbiIpOwotCi0gICAgc3RkOjp2ZWN0b3I8aW50PiBlbXB0eTsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW1wdHkyOwotCi0gICAgdGVzdDo6dGVzdF90eXBlMzxpbnQ+IHgzKGVtcHR5LmJlZ2luKCksIGVtcHR5LmVuZCgpKTsKLSAgICB0ZXN0Ojp0ZXN0X3R5cGUzPHN0ZDo6c3RyaW5nPiB5MyhlbXB0eTIuYmVnaW4oKSwgZW1wdHkyLmVuZCgpKTsKLQotICAgIC8vIFByZXZlbnQgZ2NjIHdhcm5pbmdzOgotICAgIHVudXNlZCh4MSk7IHVudXNlZCh4Mik7IHVudXNlZCh4Myk7Ci0gICAgdW51c2VkKHkxKTsgdW51c2VkKHkyKTsgdW51c2VkKHkzKTsKLX0KLQotaW50IG1haW4oKQotewotICAgIGZ3ZF90ZXN0KCk7Ci0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KLQotI2VuZGlmIC8vIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMpCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZ2xvYmFsX25hbWVzcGFjZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9nbG9iYWxfbmFtZXNwYWNlX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjZjOGRkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9nbG9iYWxfbmFtZXNwYWNlX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBhbiBBREwgYnVnIGluIEJvcmxhbmQgNS41IHdoZXJlIEFETCBpc24ndCBwZXJmb3JtZWQKLS8vIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi1zdHJ1Y3QgY3VzdG9tCi17Ci0gICAgaW50IHZhbHVlXzsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlXyAqIDEwOwotICAgIH0KLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCi0gICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tIGNvbnN0JiB4ICkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4Lmhhc2goKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGN1c3RvbShpbnQgeCkgOiB2YWx1ZV8oeCkge30KLX07Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCi1uYW1lc3BhY2UgbmRuYm9vc3QKLXsKLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGN1c3RvbSB4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHguaGFzaCgpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSMgIGVsc2UKLSMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSMgIGVuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGNjdHlwZT4KLQotdm9pZCBjdXN0b21fdGVzdHMoKQotewotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8Y3VzdG9tPiBjdXN0b21faGFzaGVyOwotICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcigxMCkgPT0gMTAwdSk7Ci0gICAgY3VzdG9tIHgoNTUpOwotICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcih4KSA9PSA1NTB1KTsKLQotICAgIHsKLSAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U7Ci0gICAgICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcih4KSA9PSBoYXNoX3ZhbHVlKHgpKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnZlY3RvcjxjdXN0b20+IGN1c3RvbV92ZWN0b3I7Ci0gICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soNSk7Ci0gICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soMjUpOwotICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDM1KTsKLQotICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCBjdXN0b20oNSkpOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCBjdXN0b20oMjUpKTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgY3VzdG9tKDM1KSk7Ci0KLSAgICBzdGQ6OnNpemVfdCBzZWVkMiA9IDA7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCA1MHUpOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgMjUwdSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCAzNTB1KTsKLQotICAgIEJPT1NUX1RFU1Qoc2VlZCA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKAotICAgICAgICBjdXN0b21fdmVjdG9yLmJlZ2luKCksIGN1c3RvbV92ZWN0b3IuZW5kKCkpKTsKLSAgICBCT09TVF9URVNUKHNlZWQgPT0gc2VlZDIpOwotfQotCi0jZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLQotCi1pbnQgbWFpbigpCi17Ci0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSAgICBjdXN0b21fdGVzdHMoKTsKLSNlbmRpZgotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbGlzdF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9saXN0X3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjk0YTgwLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9saXN0X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSMgIGVsc2UKLSMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSMgIGVuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0KLSNpbmNsdWRlIDxsaXN0PgotCi11c2luZyBzdGQ6Omxpc3Q7Ci0jZGVmaW5lIENPTlRBSU5FUl9UWVBFIGxpc3QKLSNpbmNsdWRlICIuL2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAiCi0KLSNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi1pbnQgbWFpbigpCi17Ci0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSAgICBsaXN0X3Rlc3RzOjpsaXN0X2hhc2hfaW50ZWdlcl90ZXN0cygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5MjE4NS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbG9uZ19kb3VibGVfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICJoYXNoX2Zsb2F0X3Rlc3QuaHBwIgotCi1pbnQgbWFpbigpCi17Ci0gICAgc3RkOjpjZXJyPDwiQ29tcGlsZXI6ICI8PEJPT1NUX0NPTVBJTEVSPDwiXG4iOwotICAgIHN0ZDo6Y2Vycjw8IlBsYXRmb3JtOiAiPDxCT09TVF9QTEFURk9STTw8IlxuIjsKLSAgICBzdGQ6OmNlcnI8PCJMaWJyYXJ5OiAiPDxCT09TVF9TVERMSUI8PCJcblxuIjsKLQotICAgIGZsb2F0X3Rlc3RzKCJsb25nIGRvdWJsZSIsIChsb25nIGRvdWJsZSopIDApOwotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbWFwX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4MzVjNy4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbWFwX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSMgIGVsc2UKLSMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSMgIGVuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2luY2x1ZGUgPG1hcD4KLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0KLXVzaW5nIHN0ZDo6bWFwOwotI2RlZmluZSBDT05UQUlORVJfVFlQRSBtYXAKLSNpbmNsdWRlICIuL2hhc2hfbWFwX3Rlc3QuaHBwIgotCi11c2luZyBzdGQ6Om11bHRpbWFwOwotI2RlZmluZSBDT05UQUlORVJfVFlQRSBtdWx0aW1hcAotI2luY2x1ZGUgIi4vaGFzaF9tYXBfdGVzdC5ocHAiCi0KLSNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi1pbnQgbWFpbigpCi17Ci0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLSAgICBtYXBfdGVzdHM6Om1hcF9oYXNoX2ludGVnZXJfdGVzdHMoKTsKLSAgICBtdWx0aW1hcF90ZXN0czo6bXVsdGltYXBfaGFzaF9pbnRlZ2VyX3Rlc3RzKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9tYXBfdGVzdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYmIyZmEuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2lmICFkZWZpbmVkKENPTlRBSU5FUl9UWVBFKQotI2Vycm9yICJDT05UQUlORVJfVFlQRSBub3QgZGVmaW5lZCIKLSNlbHNlCi0KLSNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NCkgLy8gY29udmVyc2lvbiBmcm9tICdpbnQnIHRvICdmbG9hdCcKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDUpIC8vIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaAotI2VuZGlmCi0KLW5hbWVzcGFjZSBCT09TVF9QUF9DQVQoQ09OVEFJTkVSX1RZUEUsIF90ZXN0cykKLXsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICB2b2lkIGludGVnZXJfdGVzdHMoVCogPSAwKQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IG51bWJlcl9vZl9jb250YWluZXJzID0gMTA7Ci0gICAgICAgIFQgY29udGFpbmVyc1tudW1iZXJfb2ZfY29udGFpbmVyc107Ci0gICAgICAgIHR5cGVkZWYgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBUOjp2YWx1ZV90eXBlIHBhaXI7Ci0gICAgICAgIHR5cGVkZWYgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBUOjprZXlfdHlwZSBrZXk7Ci0gICAgICAgIHR5cGVkZWYgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBUOjptYXBwZWRfdHlwZSB2YWx1ZTsKLQotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7Ci0gICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgaTsgKytqKQotICAgICAgICAgICAgICAgIGNvbnRhaW5lcnNbaV0uaW5zZXJ0KHBhaXIoa2V5KDApLCB2YWx1ZSgwKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29udGFpbmVyc1s2XS5pbnNlcnQocGFpcihrZXkoMSksdmFsdWUoMCkpKTsKLSAgICAgICAgY29udGFpbmVyc1s3XS5pbnNlcnQocGFpcihrZXkoMSksdmFsdWUoMCkpKTsKLSAgICAgICAgY29udGFpbmVyc1s3XS5pbnNlcnQocGFpcihrZXkoMSksdmFsdWUoMCkpKTsKLSAgICAgICAgY29udGFpbmVyc1s4XS5pbnNlcnQocGFpcihrZXkoLTEpLHZhbHVlKDEpKSk7Ci0gICAgICAgIGNvbnRhaW5lcnNbOV0uaW5zZXJ0KHBhaXIoa2V5KC0xKSx2YWx1ZSgzKSkpOwotICAgICAgICBjb250YWluZXJzWzldLmluc2VydChwYWlyKGtleSgtMSksdmFsdWUoMykpKTsKLQotICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IGhhc2hlcjsKLQotICAgICAgICBmb3IoaW50IGkyID0gMDsgaTIgPCBudW1iZXJfb2ZfY29udGFpbmVyczsgKytpMikgewotICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09IGhhc2hlcihjb250YWluZXJzW2kyXSkpOwotCi0gICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0KLSAgICAgICAgICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShjb250YWluZXJzW2kyXSkpOwotCi0gICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkKLSAgICAgICAgICAgICAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnNbaTJdLmJlZ2luKCksIGNvbnRhaW5lcnNbaTJdLmVuZCgpKSk7Ci0KLSAgICAgICAgICAgIGZvcihpbnQgajIgPSBpMiArIDE7IGoyIDwgbnVtYmVyX29mX2NvbnRhaW5lcnM7ICsrajIpIHsKLSAgICAgICAgICAgICAgICBCT09TVF9URVNUKAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lcnNbaTJdID09IGNvbnRhaW5lcnNbajJdKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0gaGFzaGVyKGNvbnRhaW5lcnNbajJdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIEJPT1NUX1BQX0NBVChDT05UQUlORVJfVFlQRSwgX2hhc2hfaW50ZWdlcl90ZXN0cygpKQotICAgIHsKLSAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8Y2hhciwgdW5zaWduZWQgY2hhcj4qKSAwKTsKLSAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8aW50LCBmbG9hdD4qKSAwKTsKLSAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZz4qKSAwKTsKLSAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8ZG91YmxlLCBzaG9ydD4qKSAwKTsKLSAgICB9Ci19Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSN1bmRlZiBDT05UQUlORVJfVFlQRQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X2ZhaWxfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X2ZhaWxfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTYzNmUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9mYWlsX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0vLyBTaW1wbGUgdGVzdCB0byBtYWtlIHN1cmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIGRvZXMgZGlzYWJsZSBleHRlbnNpb25zCi0vLyAob3IgYXQgbGVhc3Qgb25lIG9mIHRoZW0pLgotI2lmICFkZWZpbmVkKEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUykKLSMgIGRlZmluZSBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNlbHNlCi0jICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIGlnbm9yZShUIGNvbnN0Jikge30KLQotaW50IG1haW4oKQotewotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8IGludFsxMF0gPiBoYXNoZXI7Ci0gICAgaWdub3JlKGhhc2hlcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfbWFjcm9fMS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X21hY3JvXzEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWRmYTA2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfbWFjcm9fMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotCi0vLyBJbmNsdWRlIGhlYWRlciB3aXRob3V0IEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyBkZWZpbmVkCi0jICBpZiBkZWZpbmVkKEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUykKLSMgICAgdW5kZWYgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCi0jICBlbmRpZgotIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLQotLy8gSW5jbHVkZSBoZWFkZXIgd2l0aCBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgZGVmaW5lZAotIyAgZGVmaW5lIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUwotIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotI2luY2x1ZGUgPGRlcXVlPgotCi1pbnQgbWFpbigpCi17Ci0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLSAgICBzdGQ6OmRlcXVlPGludD4geDsKLQotICAgIHgucHVzaF9iYWNrKDEpOwotICAgIHgucHVzaF9iYWNrKDIpOwotCi0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OmRlcXVlPGludD4gPiBoYXNoZXI7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXIoeCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh4KSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18yLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfbWFjcm9fMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYjQyMmUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCi0KLS8vIEluY2x1ZGUgaGVhZGVyIHdpdGggQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIGRlZmluZWQKLSMgIGlmICFkZWZpbmVkKEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUykKLSMgICAgZGVmaW5lIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUwotIyAgZW5kaWYKLSMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0KLS8vIEluY2x1ZGUgaGVhZGVyIHdpdGhvdXQgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIGRlZmluZWQKLSMgIHVuZGVmIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUwotIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotI2luY2x1ZGUgPG1hcD4KLQotaW50IG1haW4oKQotewotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCi0gICAgc3RkOjptYXA8aW50LCBpbnQ+IHg7Ci0KLSAgICB4Lmluc2VydChzdGQ6Om1hcDxpbnQsIGludD46OnZhbHVlX3R5cGUoNTMsIC00MikpOwotICAgIHguaW5zZXJ0KHN0ZDo6bWFwPGludCwgaW50Pjo6dmFsdWVfdHlwZSgxNCwgLTc1KSk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6bWFwPGludCwgaW50PiA+IGhhc2hlcjsKLSAgICBCT09TVF9URVNUKGhhc2hlcih4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpKTsKLSNlbmRpZgotICAgIAotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX251bWJlcl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9udW1iZXJfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4Y2E2ZTguLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX251bWJlcl90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWwvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC91dGlsaXR5L2VuYWJsZV9pZi5ocHA+Ci0KLSNpbmNsdWRlICIuL2NvbXBpbGVfdGltZS5ocHAiCi0KLSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMjcpIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMDkpIC8vIHRydW5jYXRpb24gb2YgY29uc3RhbnQgdmFsdWUKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMTApIC8vIGNhc3QgdHJ1bmNhdGVzIGNvbnN0YW50IHZhbHVlCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVxdWFsIgotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBudW1lcmljX2V4dHJhX3Rlc3RzKHR5cGVuYW1lCi0gICAgbmRuYm9vc3Q6OmVuYWJsZV9pZl9jPG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+Ojppc19pbnRlZ2VyLAotICAgICAgICB2b2lkKj46OnR5cGUgPSAwKQotewotICAgIHR5cGVkZWYgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD4gbGltaXRzOwotCi0gICAgaWYobGltaXRzOjppc19zaWduZWQgfHwKLSAgICAgICAgbGltaXRzOjpkaWdpdHMgPD0gbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8c3RkOjpzaXplX3Q+OjpkaWdpdHMpCi0gICAgewotICAgICAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgtNSkpID09IChzdGQ6OnNpemVfdClUKC01KSk7Ci0gICAgfQotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShUKDApKSA9PSAoc3RkOjpzaXplX3QpVCgwdSkpOwotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShUKDEwKSkgPT0gKHN0ZDo6c2l6ZV90KVQoMTB1KSk7Ci0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoMjUpKSA9PSAoc3RkOjpzaXplX3QpVCgyNXUpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIG51bWVyaWNfZXh0cmFfdGVzdHModHlwZW5hbWUKLSAgICBuZG5ib29zdDo6ZGlzYWJsZV9pZl9jPG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+Ojppc19pbnRlZ2VyLAotICAgICAgICB2b2lkKj46OnR5cGUgPSAwKQotewotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgbnVtZXJpY190ZXN0KFQqKQotewotICAgIHR5cGVkZWYgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD4gbGltaXRzOwotCi0gICAgY29tcGlsZV90aW1lX3Rlc3RzKChUKikgMCk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHgxOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDI7Ci0KLSAgICBUIHYxID0gKFQpIC01OwotICAgIEJPT1NUX1RFU1QoeDEodjEpID09IHgyKHYxKSk7Ci0gICAgQk9PU1RfVEVTVCh4MShUKC01KSkgPT0geDIoVCgtNSkpKTsKLSAgICBCT09TVF9URVNUKHgxKFQoMCkpID09IHgyKFQoMCkpKTsKLSAgICBCT09TVF9URVNUKHgxKFQoMTApKSA9PSB4MihUKDEwKSkpOwotICAgIEJPT1NUX1RFU1QoeDEoVCgyNSkpID09IHgyKFQoMjUpKSk7Ci0gICAgQk9PU1RfVEVTVCh4MShUKDUpIC0gVCg1KSkgPT0geDIoVCgwKSkpOwotICAgIEJPT1NUX1RFU1QoeDEoVCg2KSArIFQoNCkpID09IHgyKFQoMTApKSk7Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotICAgIEJPT1NUX1RFU1QoeDEoVCgtNSkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgtNSkpKTsKLSAgICBCT09TVF9URVNUKHgxKFQoMCkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgwKSkpOwotICAgIEJPT1NUX1RFU1QoeDEoVCgxMCkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgxMCkpKTsKLSAgICBCT09TVF9URVNUKHgxKFQoMjUpKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoMjUpKSk7Ci0KLSAgICBudW1lcmljX2V4dHJhX3Rlc3RzPFQ+KCk7Ci0jZW5kaWYKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIGxpbWl0c190ZXN0KFQqKQotewotICAgIHR5cGVkZWYgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD4gbGltaXRzOwotCi0gICAgaWYobGltaXRzOjppc19zcGVjaWFsaXplZCkKLSAgICB7Ci0gICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDE7Ci0gICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDI7Ci0KLSAgICAgICAgVCBtaW5fdmFsdWUgPSAobGltaXRzOjptaW4pKCk7Ci0gICAgICAgIFQgbWF4X3ZhbHVlID0gKGxpbWl0czo6bWF4KSgpOwotCi0gICAgICAgIEJPT1NUX1RFU1QoeDEobWluX3ZhbHVlKSA9PSB4MigobGltaXRzOjptaW4pKCkpKTsKLSAgICAgICAgQk9PU1RfVEVTVCh4MShtYXhfdmFsdWUpID09IHgyKChsaW1pdHM6Om1heCkoKSkpOwotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLSAgICAgICAgQk9PU1RfVEVTVCh4MShtaW5fdmFsdWUpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUobWluX3ZhbHVlKSk7Ci0gICAgICAgIEJPT1NUX1RFU1QoeDEobWF4X3ZhbHVlKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1heF92YWx1ZSkpOwotCi0gICAgICAgIGlmIChsaW1pdHM6OmlzX2ludGVnZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtaW5fdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgID09IHN0ZDo6c2l6ZV90KG1pbl92YWx1ZSkpOwotICAgICAgICAgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1heF92YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgPT0gc3RkOjpzaXplX3QobWF4X3ZhbHVlKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIHBvb3JfcXVhbGl0eV90ZXN0cyhUKikKLXsKLSAgICB0eXBlZGVmIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+IGxpbWl0czsKLQotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDE7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiB4MjsKLQotICAgIC8vIEEgaGFzaCBmdW5jdGlvbiBjYW4gbGVnYWxseSBmYWlsIHRoZXNlIHRlc3RzLCBidXQgaXQnbGwgbm90IGJlIGEgZ29vZAotICAgIC8vIHNpZ24uCi0gICAgaWYoVCgxKSAhPSBUKC0xKSkKLSAgICAgICAgQk9PU1RfVEVTVCh4MShUKDEpKSAhPSAgeDIoVCgtMSkpKTsKLSAgICBpZihUKDEpICE9IFQoMikpCi0gICAgICAgIEJPT1NUX1RFU1QoeDEoVCgxKSkgIT0gIHgyKFQoMikpKTsKLSAgICBpZigobGltaXRzOjptYXgpKCkgIT0gKGxpbWl0czo6bWF4KSgpIC0gMSkKLSAgICAgICAgQk9PU1RfVEVTVCh4MShzdGF0aWNfY2FzdDxUPigobGltaXRzOjptYXgpKCkpKQotICAgICAgICAgICAgIT0geDIoc3RhdGljX2Nhc3Q8VD4oKGxpbWl0czo6bWF4KSgpIC0gMSkpKTsKLX0KLQotdm9pZCBib29sX3Rlc3QoKQotewotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8Ym9vbD4geDE7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxib29sPiB4MjsKLSAgICAKLSAgICBCT09TVF9URVNUKHgxKHRydWUpID09IHgyKHRydWUpKTsKLSAgICBCT09TVF9URVNUKHgxKGZhbHNlKSA9PSB4MihmYWxzZSkpOwotICAgIEJPT1NUX1RFU1QoeDEodHJ1ZSkgIT0geDIoZmFsc2UpKTsKLSAgICBCT09TVF9URVNUKHgxKGZhbHNlKSAhPSB4Mih0cnVlKSk7Ci19Ci0KLSNkZWZpbmUgTlVNRVJJQ19URVNUKHR5cGUsIG5hbWUpIFwKLSAgICBzdGQ6OmNlcnI8PCJUZXN0aW5nOiAiIEJPT1NUX1NUUklOR0laRShuYW1lKSAiXG4iOyBcCi0gICAgbnVtZXJpY190ZXN0KCh0eXBlKikgMCk7IFwKLSAgICBsaW1pdHNfdGVzdCgodHlwZSopIDApOyBcCi0gICAgcG9vcl9xdWFsaXR5X3Rlc3RzKCh0eXBlKikgMCk7Ci0jZGVmaW5lIE5VTUVSSUNfVEVTVF9OT19MSU1JVFModHlwZSwgbmFtZSkgXAotICAgIHN0ZDo6Y2Vycjw8IlRlc3Rpbmc6ICIgQk9PU1RfU1RSSU5HSVpFKG5hbWUpICJcbiI7IFwKLSAgICBudW1lcmljX3Rlc3QoKHR5cGUqKSAwKTsgXAotICAgIHBvb3JfcXVhbGl0eV90ZXN0cygodHlwZSopIDApOwotCi1pbnQgbWFpbigpCi17Ci0gICAgTlVNRVJJQ19URVNUKGNoYXIsIGNoYXIpCi0gICAgTlVNRVJJQ19URVNUKHNpZ25lZCBjaGFyLCBzY2hhcikKLSAgICBOVU1FUklDX1RFU1QodW5zaWduZWQgY2hhciwgdWNoYXIpCi0jaWZuZGVmIEJPT1NUX05PX0lOVFJJTlNJQ19XQ0hBUl9UCi0gICAgTlVNRVJJQ19URVNUKHdjaGFyX3QsIHdjaGFyKQotI2VuZGlmCi0gICAgTlVNRVJJQ19URVNUKHNob3J0LCBzaG9ydCkKLSAgICBOVU1FUklDX1RFU1QodW5zaWduZWQgc2hvcnQsIHVzaG9ydCkKLSAgICBOVU1FUklDX1RFU1QoaW50LCBpbnQpCi0gICAgTlVNRVJJQ19URVNUKHVuc2lnbmVkIGludCwgdWludCkKLSAgICBOVU1FUklDX1RFU1QobG9uZywgaGFzaF9sb25nKQotICAgIE5VTUVSSUNfVEVTVCh1bnNpZ25lZCBsb25nLCB1bG9uZykKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0xPTkdfTE9ORykKLSAgICBOVU1FUklDX1RFU1RfTk9fTElNSVRTKG5kbmJvb3N0Ojpsb25nX2xvbmdfdHlwZSwgbG9uZ19sb25nKQotICAgIE5VTUVSSUNfVEVTVF9OT19MSU1JVFMobmRuYm9vc3Q6OnVsb25nX2xvbmdfdHlwZSwgdWxvbmdfbG9uZykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfSU5UMTI4KQotICAgIE5VTUVSSUNfVEVTVF9OT19MSU1JVFMobmRuYm9vc3Q6OmludDEyOF90eXBlLCBpbnQxMjgpCi0gICAgTlVNRVJJQ19URVNUX05PX0xJTUlUUyhuZG5ib29zdDo6dWludDEyOF90eXBlLCB1aW50MTI4KQotI2VuZGlmCi0KLSAgICBOVU1FUklDX1RFU1QoZmxvYXQsIGZsb2F0KQotICAgIE5VTUVSSUNfVEVTVChkb3VibGUsIGRvdWJsZSkKLQotICAgIE5VTUVSSUNfVEVTVChzdGQ6OnNpemVfdCwgc2l6ZV90KQotICAgIE5VTUVSSUNfVEVTVChzdGQ6OnB0cmRpZmZfdCwgcHRyZGlmZl90KQotCi0gICAgYm9vbF90ZXN0KCk7Ci0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9wb2ludGVyX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3BvaW50ZXJfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MjA2OTYuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3BvaW50ZXJfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKLQotdm9pZCBwb2ludGVyX3Rlc3RzKCkKLXsKLSAgICBjb21waWxlX3RpbWVfdGVzdHMoKGludCoqKSAwKTsKLSAgICBjb21waWxlX3RpbWVfdGVzdHMoKHZvaWQqKikgMCk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludCo+IHgxOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4geDI7Ci0KLSAgICBpbnQgaW50MTsKLSAgICBpbnQgaW50MjsKLQotICAgIEJPT1NUX1RFU1QoeDEoMCkgPT0geDIoMCkpOwotICAgIEJPT1NUX1RFU1QoeDEoJmludDEpID09IHgyKCZpbnQxKSk7Ci0gICAgQk9PU1RfVEVTVCh4MSgmaW50MikgPT0geDIoJmludDIpKTsKLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotICAgIEJPT1NUX1RFU1QoeDEoJmludDEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJmludDEpKTsKLSAgICBCT09TVF9URVNUKHgxKCZpbnQyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKCZpbnQyKSk7Ci0KLSAgICAvLyBUaGlzIGlzbid0IHNwZWNpZmllZCBpbiBQZXRlcidzIHByb3Bvc2FsOgotICAgIEJPT1NUX1RFU1QoeDEoMCkgPT0gMCk7Ci0jZW5kaWYKLX0KLQotaW50IG1haW4oKQotewotICAgIHBvaW50ZXJfdGVzdHMoKTsKLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9yYW5nZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9yYW5nZV90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA5MjM5YS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfcmFuZ2VfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZiAhZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLQotaW50IG1haW4oKSB7fQotCi0jZWxzZQotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNlbHNlCi0jICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLXZvaWQgaGFzaF9yYW5nZV90ZXN0cygpCi17Ci0gICAgc3RkOjp2ZWN0b3I8aW50PiBlbXB0eSwgdmFsdWVzMSwgdmFsdWVzMiwgdmFsdWVzMywgdmFsdWVzNCwgdmFsdWVzNTsKLSAgICB2YWx1ZXMxLnB1c2hfYmFjaygwKTsKLSAgICB2YWx1ZXMyLnB1c2hfYmFjaygxMCk7Ci0gICAgdmFsdWVzMy5wdXNoX2JhY2soMTApOwotICAgIHZhbHVlczMucHVzaF9iYWNrKDIwKTsKLSAgICB2YWx1ZXM0LnB1c2hfYmFjaygxNSk7Ci0gICAgdmFsdWVzNC5wdXNoX2JhY2soNzUpOwotICAgIHZhbHVlczUucHVzaF9iYWNrKDEwKTsKLSAgICB2YWx1ZXM1LnB1c2hfYmFjaygyMCk7Ci0gICAgdmFsdWVzNS5wdXNoX2JhY2soMTUpOwotICAgIHZhbHVlczUucHVzaF9iYWNrKDc1KTsKLSAgICB2YWx1ZXM1LnB1c2hfYmFjaygxMCk7Ci0gICAgdmFsdWVzNS5wdXNoX2JhY2soMjApOwotCi0gICAgc3RkOjp2ZWN0b3I8aW50PiB4OwotCi0gICAgc3RkOjpzaXplX3QgeF9zZWVkID0gMDsKLSAgICBCT09TVF9URVNUKHhfc2VlZCA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOwotCi0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGVtcHR5LmJlZ2luKCksIGVtcHR5LmVuZCgpKQotICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOwotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShlbXB0eS5iZWdpbigpLCBlbXB0eS5lbmQoKSkKLSAgICAgICAgIT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMxLmJlZ2luKCksIHZhbHVlczEuZW5kKCkpKTsKLQotICAgIHgucHVzaF9iYWNrKDEwKTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoeF9zZWVkLCAxMCk7Ci0gICAgQk9PU1RfVEVTVCh4X3NlZWQgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKLQotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShlbXB0eS5iZWdpbigpLCBlbXB0eS5lbmQoKSkKLSAgICAgICAgIT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKLSAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMi5iZWdpbigpLCB2YWx1ZXMyLmVuZCgpKQotICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOwotCi0gICAgeC5wdXNoX2JhY2soMjApOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZSh4X3NlZWQsIDIwKTsKLSAgICBCT09TVF9URVNUKHhfc2VlZCA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOwotCi0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGVtcHR5LmJlZ2luKCksIGVtcHR5LmVuZCgpKQotICAgICAgICAhPSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOwotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMyLmJlZ2luKCksIHZhbHVlczIuZW5kKCkpCi0gICAgICAgICE9IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7Ci0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczMuYmVnaW4oKSwgdmFsdWVzMy5lbmQoKSkKLSAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKLQotICAgIHN0ZDo6c2l6ZV90IHNlZWQgPQotICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczMuYmVnaW4oKSwgdmFsdWVzMy5lbmQoKSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkLCB2YWx1ZXM0LmJlZ2luKCksIHZhbHVlczQuZW5kKCkpOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2Uoc2VlZCwgeC5iZWdpbigpLCB4LmVuZCgpKTsKLSAgICBCT09TVF9URVNUKHNlZWQgPT0KLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXM1LmJlZ2luKCksIHZhbHVlczUuZW5kKCkpKTsKLX0KLQotaW50IG1haW4oKQotewotICAgIGhhc2hfcmFuZ2VfdGVzdHMoKTsKLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQotCi0jZW5kaWYgLy8gVEVTVF9FWFRFU05JT05TCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODQ2YjAuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NlcXVlbmNlX3Rlc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWYgIWRlZmluZWQoQ09OVEFJTkVSX1RZUEUpCi0jZXJyb3IgIkNPTlRBSU5FUl9UWVBFIG5vdCBkZWZpbmVkIgotI2Vsc2UKLQotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0jaWYgZGVmaW5lZChCT09TVF9NU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ1KSAvLyBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKLSNlbmRpZgotCi1uYW1lc3BhY2UgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfdGVzdHMpCi17Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgdm9pZCBpbnRlZ2VyX3Rlc3RzKFQqID0gMCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBudW1iZXJfb2ZfY29udGFpbmVycyA9IDExOwotICAgICAgICBUIGNvbnRhaW5lcnNbbnVtYmVyX29mX2NvbnRhaW5lcnNdOwotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKLSAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBpOyArK2opCi0gICAgICAgICAgICAgICAgY29udGFpbmVyc1tpXS5wdXNoX2JhY2soMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250YWluZXJzWzVdLnB1c2hfYmFjaygxKTsKLSAgICAgICAgY29udGFpbmVyc1s2XS5wdXNoX2JhY2soMSk7Ci0gICAgICAgIGNvbnRhaW5lcnNbNl0ucHVzaF9iYWNrKDEpOwotICAgICAgICBjb250YWluZXJzWzddLnB1c2hfYmFjaygtMSk7Ci0gICAgICAgIGNvbnRhaW5lcnNbOF0ucHVzaF9iYWNrKC0xKTsKLSAgICAgICAgY29udGFpbmVyc1s4XS5wdXNoX2JhY2soLTEpOwotICAgICAgICBjb250YWluZXJzWzldLnB1c2hfYmFjaygxKTsKLSAgICAgICAgY29udGFpbmVyc1s5XS5wdXNoX2JhY2soLTEpOwotICAgICAgICBjb250YWluZXJzWzEwXS5wdXNoX2JhY2soLTEpOwotICAgICAgICBjb250YWluZXJzWzEwXS5wdXNoX2JhY2soMSk7Ci0KLSAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiBoYXNoZXI7Ci0KLSAgICAgICAgZm9yKGludCBpMiA9IDA7IGkyIDwgbnVtYmVyX29mX2NvbnRhaW5lcnM7ICsraTIpIHsKLSAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tpMl0pKTsKLQotICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09Ci0gICAgICAgICAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoY29udGFpbmVyc1tpMl0pKTsKLQotICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pCi0gICAgICAgICAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzW2kyXS5iZWdpbigpLCBjb250YWluZXJzW2kyXS5lbmQoKSkpOwotCi0gICAgICAgICAgICBmb3IoaW50IGoyID0gaTIgKyAxOyBqMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2oyKSB7Ci0gICAgICAgICAgICAgICAgQk9PU1RfVEVTVCgKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZXJzW2kyXSA9PSBjb250YWluZXJzW2oyXSkgPT0KLSAgICAgICAgICAgICAgICAgICAgICAgIChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09IGhhc2hlcihjb250YWluZXJzW2oyXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBCT09TVF9QUF9DQVQoQ09OVEFJTkVSX1RZUEUsIF9oYXNoX2ludGVnZXJfdGVzdHMoKSkKLSAgICB7Ci0gICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGNoYXI+KikgMCk7Ci0gICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGludD4qKSAwKTsKLSAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8dW5zaWduZWQgbG9uZz4qKSAwKTsKLSAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8ZG91YmxlPiopIDApOwotICAgIH0KLX0KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKLQotI3VuZGVmIENPTlRBSU5FUl9UWVBFCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zZXRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTQ0ZTkyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zZXRfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotIyAgZWxzZQotIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLQotI2luY2x1ZGUgPHNldD4KLQotdXNpbmcgc3RkOjpzZXQ7Ci0jZGVmaW5lIENPTlRBSU5FUl9UWVBFIHNldAotI2luY2x1ZGUgIi4vaGFzaF9zZXRfdGVzdC5ocHAiCi0KLXVzaW5nIHN0ZDo6bXVsdGlzZXQ7Ci0jZGVmaW5lIENPTlRBSU5FUl9UWVBFIG11bHRpc2V0Ci0jaW5jbHVkZSAiLi9oYXNoX3NldF90ZXN0LmhwcCIKLQotI2VuZGlmCi0KLWludCBtYWluKCkKLXsKLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotICAgIHNldF90ZXN0czo6c2V0X2hhc2hfaW50ZWdlcl90ZXN0cygpOwotICAgIG11bHRpc2V0X3Rlc3RzOjptdWx0aXNldF9oYXNoX2ludGVnZXJfdGVzdHMoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NldF90ZXN0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFkNDkwOS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWYgIWRlZmluZWQoQ09OVEFJTkVSX1RZUEUpCi0jZXJyb3IgIkNPTlRBSU5FUl9UWVBFIG5vdCBkZWZpbmVkIgotI2Vsc2UKLQotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0jaWYgZGVmaW5lZChCT09TVF9NU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ1KSAvLyBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKLSNlbmRpZgotCi1uYW1lc3BhY2UgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfdGVzdHMpCi17Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgdm9pZCBpbnRlZ2VyX3Rlc3RzKFQqID0gMCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBudW1iZXJfb2ZfY29udGFpbmVycyA9IDEyOwotICAgICAgICBUIGNvbnRhaW5lcnNbbnVtYmVyX29mX2NvbnRhaW5lcnNdOwotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKLSAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBpOyArK2opCi0gICAgICAgICAgICAgICAgY29udGFpbmVyc1tpXS5pbnNlcnQoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250YWluZXJzWzZdLmluc2VydCgxKTsKLSAgICAgICAgY29udGFpbmVyc1s3XS5pbnNlcnQoMSk7Ci0gICAgICAgIGNvbnRhaW5lcnNbN10uaW5zZXJ0KDEpOwotICAgICAgICBjb250YWluZXJzWzhdLmluc2VydCgtMSk7Ci0gICAgICAgIGNvbnRhaW5lcnNbOV0uaW5zZXJ0KC0xKTsKLSAgICAgICAgY29udGFpbmVyc1s5XS5pbnNlcnQoLTEpOwotICAgICAgICBjb250YWluZXJzWzEwXS5pbnNlcnQoLTEpOwotICAgICAgICBjb250YWluZXJzWzEwXS5pbnNlcnQoMSk7Ci0gICAgICAgIGNvbnRhaW5lcnNbMTFdLmluc2VydCgxKTsKLSAgICAgICAgY29udGFpbmVyc1sxMV0uaW5zZXJ0KDIpOwotICAgICAgICBjb250YWluZXJzWzExXS5pbnNlcnQoMyk7Ci0gICAgICAgIGNvbnRhaW5lcnNbMTFdLmluc2VydCg0KTsKLSAgICAgICAgY29udGFpbmVyc1sxMV0uaW5zZXJ0KDUpOwotCi0gICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gaGFzaGVyOwotCi0gICAgICAgIGZvcihpbnQgaTIgPSAwOyBpMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2kyKSB7Ci0gICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0gaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSk7Ci0KLSAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PQotICAgICAgICAgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGNvbnRhaW5lcnNbaTJdKSk7Ci0KLSAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKQotICAgICAgICAgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyc1tpMl0uYmVnaW4oKSwgY29udGFpbmVyc1tpMl0uZW5kKCkpKTsKLQotICAgICAgICAgICAgZm9yKGludCBqMiA9IGkyICsgMTsgajIgPCBudW1iZXJfb2ZfY29udGFpbmVyczsgKytqMikgewotICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVyc1tpMl0gPT0gY29udGFpbmVyc1tqMl0pID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tqMl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfaGFzaF9pbnRlZ2VyX3Rlc3RzKCkpCi0gICAgewotICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxjaGFyPiopIDApOwotICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxpbnQ+KikgMCk7Ci0gICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPHVuc2lnbmVkIGxvbmc+KikgMCk7Ci0gICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGRvdWJsZT4qKSAwKTsKLSAgICB9Ci19Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSN1bmRlZiBDT05UQUlORVJfVFlQRQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX2FycmF5X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF9hcnJheV90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhMjhmZi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX2FycmF5X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotIyAgZWxzZQotIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfQVJSQVkpCi0jZGVmaW5lIFRFU1RfQVJSQVkKLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfQVJSQVkKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIGFycmF5X3Rlc3RzKFQgY29uc3QmIHYpIHsKLSAgICBuZG5ib29zdDo6aGFzaDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPiBoZjsKLSAgICBmb3IodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaSA9IHYuYmVnaW4oKTsgaSAhPSB2LmVuZCgpOyArK2kpIHsKLSAgICAgICAgZm9yKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGogPSB2LmJlZ2luKCk7IGogIT0gdi5lbmQoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoaSAhPSBqKQotICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoaGYoKmkpICE9IGhmKCpqKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQk9PU1RfVEVTVChoZigqaSkgPT0gaGYoKmopKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBlbXB0eV9hcnJheV90ZXN0KCkgewotLyoKLSAgICBuZG5ib29zdDo6aGFzaDxzdGQ6OmFycmF5PGludCwgMD4gPiBlbXB0eV9hcnJheV9oYXNoOwotICAgIHN0ZDo6YXJyYXk8aW50LCAwPiBlbXB0eV9hcnJheTsKLSAgICBCT09TVF9URVNUKGVtcHR5X2FycmF5X2hhc2goZW1wdHlfYXJyYXkpID09IG5kbmJvb3N0OjpoYXNoX3ZhbHVlKGVtcHR5X2FycmF5KSk7Ci0qLwotfQotCi12b2lkIGludF8xX2FycmF5X3Rlc3QoKQotewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6YXJyYXk8aW50LCAxPiA+IGFycmF5czsKLSAgICBzdGQ6OmFycmF5PGludCwgMT4gdmFsOwotICAgIHZhbFswXSA9IDA7Ci0gICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOwotICAgIHZhbFswXSA9IDE7Ci0gICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOwotICAgIHZhbFswXSA9IDI7Ci0gICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOwotICAgIGFycmF5X3Rlc3RzKGFycmF5cyk7Ci19Ci0KLXZvaWQgc3RyaW5nXzFfYXJyYXlfdGVzdCgpCi17Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjphcnJheTxzdGQ6OnN0cmluZywgMT4gPiBhcnJheXM7Ci0gICAgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgMT4gdmFsOwotICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKLSAgICB2YWxbMF0gPSAib25lIjsKLSAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7Ci0gICAgdmFsWzBdID0gInR3byI7Ci0gICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOwotICAgIGFycmF5X3Rlc3RzKGFycmF5cyk7Ci19Ci0KLXZvaWQgc3RyaW5nXzNfYXJyYXlfdGVzdCgpCi17Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjphcnJheTxzdGQ6OnN0cmluZywzID4gPiBhcnJheXM7Ci0gICAgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgMz4gdmFsOwotICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKLSAgICB2YWxbMF0gPSAib25lIjsKLSAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7Ci0gICAgdmFsWzBdID0gIiI7IHZhbFsxXSA9ICJvbmUiOyB2YWxbMl0gPSAiIjsKLSAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7Ci0gICAgdmFsWzBdID0gIiI7IHZhbFsxXSA9ICIiOyB2YWxbMl0gPSAib25lIjsKLSAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7Ci0gICAgdmFsWzBdID0gIm9uZSI7IHZhbFsxXSA9ICJvbmUiOyB2YWxbMl0gPSAib25lIjsKLSAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7Ci0gICAgdmFsWzBdID0gIm9uZSI7IHZhbFsxXSA9ICJ0d28iOyB2YWxbMl0gPSAidGhyZWUiOwotICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKLSAgICBhcnJheV90ZXN0cyhhcnJheXMpOwotfQotCi0jZW5kaWYgLy8gVEVTVF9BUlJBWQotCi1pbnQgbWFpbigpCi17Ci0jaWZkZWYgVEVTVF9BUlJBWQotICAgIGVtcHR5X2FycmF5X3Rlc3QoKTsKLSAgICBpbnRfMV9hcnJheV90ZXN0KCk7Ci0gICAgc3RyaW5nXzFfYXJyYXlfdGVzdCgpOwotICAgIHN0cmluZ18zX2FycmF5X3Rlc3QoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX3NtYXJ0X3B0cl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfc21hcnRfcHRyX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzljNzE4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfc21hcnRfcHRyX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKLSMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1NNQVJUX1BUUikKLSNkZWZpbmUgVEVTVF9TTUFSVF9QVFJTCi0jaW5jbHVkZSA8bWVtb3J5PgotI2VuZGlmCi0KLSNpZmRlZiBURVNUX1NNQVJUX1BUUlMKLQotdm9pZCBzaGFyZWRfcHRyX3Rlc3RzKCkKLXsKLSAgICBzdGQ6OnNoYXJlZF9wdHI8aW50PiB4OwotICAgIGNvbXBpbGVfdGltZV90ZXN0cygmeCk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6c2hhcmVkX3B0cjxpbnQ+ID4geDE7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnNoYXJlZF9wdHI8aW50PiA+IHgyOwotCi0gICAgc3RkOjpzaGFyZWRfcHRyPGludD4gcHRyMShuZXcgaW50KDEwKSk7Ci0gICAgc3RkOjpzaGFyZWRfcHRyPGludD4gcHRyMjsKLQotICAgIEJPT1NUX1RFU1QoeDEoeCkgPT0geDIocHRyMikpOwotICAgIEJPT1NUX1RFU1QoeDEoeCkgIT0geDIocHRyMSkpOwotICAgIHB0cjIucmVzZXQobmV3IGludCgxMCkpOwotICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgPT0geDIocHRyMSkpOwotICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgIT0geDIocHRyMikpOwotICAgIHB0cjIgPSBwdHIxOwotICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgPT0geDIocHRyMikpOwotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCi0gICAgQk9PU1RfVEVTVCh4MSh4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpKTsKLSAgICBCT09TVF9URVNUKHgxKHB0cjEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUocHRyMikpOwotI2VuZGlmCi19Ci0KLXZvaWQgdW5pcXVlX3B0cl90ZXN0cygpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPGludD4geDsKLSAgICBjb21waWxlX3RpbWVfdGVzdHMoJngpOwotCi0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiA+IHgxOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4gPiB4MjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHB0cjEobmV3IGludCgxMCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHB0cjI7Ci0KLSAgICBCT09TVF9URVNUKHgxKHgpID09IHgyKHB0cjIpKTsKLSAgICBCT09TVF9URVNUKHgxKHgpICE9IHgyKHB0cjEpKTsKLSAgICBwdHIyLnJlc2V0KG5ldyBpbnQoMTApKTsKLSAgICBCT09TVF9URVNUKHgxKHB0cjEpID09IHgyKHB0cjEpKTsKLSAgICBCT09TVF9URVNUKHgxKHB0cjEpICE9IHgyKHB0cjIpKTsKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCi0gICAgQk9PU1RfVEVTVCh4MSh4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpKTsKLSNlbmRpZgotfQotCi0jZW5kaWYKLQotaW50IG1haW4oKQotewotI2lmZGVmIFRFU1RfU01BUlRfUFRSUwotICAgIHNoYXJlZF9wdHJfdGVzdHMoKTsKLSAgICB1bmlxdWVfcHRyX3Rlc3RzKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF90dXBsZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfdHVwbGVfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNTM0NmEuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF90dXBsZV90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotIyAgZWxzZQotIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfVFVQTEUpCi0jZGVmaW5lIFRFU1RfVFVQTEUKLSNpbmNsdWRlIDx0dXBsZT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfVFVQTEUKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIHR1cGxlX3Rlc3RzKFQgY29uc3QmIHYpIHsKLSAgICBuZG5ib29zdDo6aGFzaDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPiBoZjsKLSAgICBmb3IodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaSA9IHYuYmVnaW4oKTsgaSAhPSB2LmVuZCgpOyArK2kpIHsKLSAgICAgICAgZm9yKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGogPSB2LmJlZ2luKCk7IGogIT0gdi5lbmQoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoaSAhPSBqKQotICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoaGYoKmkpICE9IGhmKCpqKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQk9PU1RfVEVTVChoZigqaSkgPT0gaGYoKmopKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBlbXB0eV90dXBsZV90ZXN0KCkgewotICAgIG5kbmJvb3N0OjpoYXNoPHN0ZDo6dHVwbGU8PiA+IGVtcHR5X3R1cGxlX2hhc2g7Ci0gICAgc3RkOjp0dXBsZTw+IGVtcHR5X3R1cGxlOwotICAgIEJPT1NUX1RFU1QoZW1wdHlfdHVwbGVfaGFzaChlbXB0eV90dXBsZSkgPT0gbmRuYm9vc3Q6Omhhc2hfdmFsdWUoZW1wdHlfdHVwbGUpKTsKLX0KLQotdm9pZCBpbnRfdHVwbGVfdGVzdCgpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnR1cGxlPGludD4gPiBpbnRfdHVwbGVzOwotICAgIGludF90dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgwKSk7Ci0gICAgaW50X3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDEpKTsKLSAgICBpbnRfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMikpOwotICAgIHR1cGxlX3Rlc3RzKGludF90dXBsZXMpOwotfQotCi12b2lkIGludF9zdHJpbmdfdHVwbGVfdGVzdCgpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnR1cGxlPGludCwgc3RkOjpzdHJpbmc+ID4gaW50X3N0cmluZ190dXBsZXM7Ci0gICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgwLCBzdGQ6OnN0cmluZygiemVybyIpKSk7Ci0gICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgxLCBzdGQ6OnN0cmluZygib25lIikpKTsKLSAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDIsIHN0ZDo6c3RyaW5nKCJ0d28iKSkpOwotICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMCwgc3RkOjpzdHJpbmcoIm9uZSIpKSk7Ci0gICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgxLCBzdGQ6OnN0cmluZygiemVybyIpKSk7Ci0gICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgwLCBzdGQ6OnN0cmluZygiIikpKTsKLSAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDEsIHN0ZDo6c3RyaW5nKCIiKSkpOwotICAgIHR1cGxlX3Rlc3RzKGludF9zdHJpbmdfdHVwbGVzKTsKLX0KLQotI2VuZGlmIC8vIFRFU1RfVFVQTEUKLQotaW50IG1haW4oKQotewotI2lmZGVmIFRFU1RfVFVQTEUKLSAgICBlbXB0eV90dXBsZV90ZXN0KCk7Ci0gICAgaW50X3R1cGxlX3Rlc3QoKTsKLSAgICBpbnRfc3RyaW5nX3R1cGxlX3Rlc3QoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RyaW5nX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0cmluZ190ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNlNzZhZi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RyaW5nX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNlbHNlCi0jICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKLQotdm9pZCBzdHJpbmdfdGVzdHMoKQotewotICAgIGNvbXBpbGVfdGltZV90ZXN0cygoc3RkOjpzdHJpbmcqKSAwKTsKLQotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpzdHJpbmc+IHgxOwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpzdHJpbmc+IHgyOwotCi0gICAgQk9PU1RfVEVTVCh4MSgiSGVsbG8iKSA9PSB4MihzdGQ6OnN0cmluZygiSGVsIikgKyAibG8iKSk7Ci0gICAgQk9PU1RfVEVTVCh4MSgiIikgPT0geDIoc3RkOjpzdHJpbmcoKSkpOwotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLSAgICBzdGQ6OnN0cmluZyB2YWx1ZTE7Ci0gICAgc3RkOjpzdHJpbmcgdmFsdWUyKCJIZWxsbyIpOwotCi0gICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUxKSk7Ci0gICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUyKSk7Ci0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMSkgPT0KLSAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWUxLmJlZ2luKCksIHZhbHVlMS5lbmQoKSkpOwotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2YWx1ZTIpID09Ci0gICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlMi5iZWdpbigpLCB2YWx1ZTIuZW5kKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fU1REX1dTVFJJTkcpCi12b2lkIHdzdHJpbmdfdGVzdHMoKQotewotICAgIGNvbXBpbGVfdGltZV90ZXN0cygoc3RkOjp3c3RyaW5nKikgMCk7Ci0KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6d3N0cmluZz4geDE7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OndzdHJpbmc+IHgyOwotCi0gICAgQk9PU1RfVEVTVCh4MShMIkhlbGxvIikgPT0geDIoc3RkOjp3c3RyaW5nKEwiSGVsIikgKyBMImxvIikpOwotICAgIEJPT1NUX1RFU1QoeDEoTCIiKSA9PSB4MihzdGQ6OndzdHJpbmcoKSkpOwotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKLSAgICBzdGQ6OndzdHJpbmcgdmFsdWUxOwotICAgIHN0ZDo6d3N0cmluZyB2YWx1ZTIoTCJIZWxsbyIpOwotCi0gICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUxKSk7Ci0gICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUyKSk7Ci0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMSkgPT0KLSAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWUxLmJlZ2luKCksIHZhbHVlMS5lbmQoKSkpOwotICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2YWx1ZTIpID09Ci0gICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlMi5iZWdpbigpLCB2YWx1ZTIuZW5kKCkpKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLWludCBtYWluKCkKLXsKLSAgICBzdHJpbmdfdGVzdHMoKTsKLSNpZiAhZGVmaW5lZChCT09TVF9OT19TVERfV1NUUklORykKLSAgICB3c3RyaW5nX3Rlc3RzKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF90eXBlX2luZGV4X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3R5cGVfaW5kZXhfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZjgxYWUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3R5cGVfaW5kZXhfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDExIERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNlbHNlCi0jICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2VuZGlmCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfVFlQRUlOREVYKQotCi0jaW5jbHVkZSA8dHlwZWluZGV4PgotCi12b2lkIHRlc3RfdHlwZV9pbmRleCgpIHsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6dHlwZV9pbmRleD4gaGFzaGVyOwotCi0jaWYgZGVmaW5lZChCT09TVF9OT19UWVBFSUQpCi0gICAgc3RkOjpjb3V0PDwiVW5hYmxlIHRvIHRlc3Qgc3RkOjp0eXBlX2luZGV4LCBhcyB0eXBlaWQgaXNuJ3QgYXZhaWxhYmxlIgotICAgICAgICA8PHN0ZDo6ZW5kbDsKLSNlbHNlCi0gICAgc3RkOjp0eXBlX2luZGV4IGludF9pbmRleCA9IHR5cGVpZChpbnQpOwotICAgIHN0ZDo6dHlwZV9pbmRleCBpbnQyX2luZGV4ID0gdHlwZWlkKGludCk7Ci0gICAgc3RkOjp0eXBlX2luZGV4IGNoYXJfaW5kZXggPSB0eXBlaWQoY2hhcik7Ci0gICAgCi0gICAgQk9PU1RfVEVTVChoYXNoZXIoaW50X2luZGV4KSA9PSBpbnRfaW5kZXguaGFzaF9jb2RlKCkpOwotICAgIEJPT1NUX1RFU1QoaGFzaGVyKGludF9pbmRleCkgPT0gaW50Ml9pbmRleC5oYXNoX2NvZGUoKSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXIoY2hhcl9pbmRleCkgPT0gY2hhcl9pbmRleC5oYXNoX2NvZGUoKSk7Ci0gICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGludF9pbmRleCkgPT0gaW50X2luZGV4Lmhhc2hfY29kZSgpKTsKLSAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoaW50X2luZGV4KSA9PSBpbnQyX2luZGV4Lmhhc2hfY29kZSgpKTsKLSAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoY2hhcl9pbmRleCkgPT0gY2hhcl9pbmRleC5oYXNoX2NvZGUoKSk7Ci0KLSAgICBCT09TVF9URVNUKGhhc2hlcihpbnRfaW5kZXgpID09IGhhc2hlcihpbnQyX2luZGV4KSk7Ci0gICAgQk9PU1RfVEVTVChoYXNoZXIoaW50X2luZGV4KSAhPSBoYXNoZXIoY2hhcl9pbmRleCkpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotaW50IG1haW4oKQotewotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9UWVBFSU5ERVgpCi0gICAgdGVzdF90eXBlX2luZGV4KCk7Ci0jZWxzZQotICAgIHN0ZDo6Y291dDw8Ijx0eXBlX2luZGV4PiBub3QgYXZhaWxhYmxlLiI8PHN0ZDo6ZW5kbDsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdmFsdWVfYXJyYXlfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdmFsdWVfYXJyYXlfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNzlhYzcuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3ZhbHVlX2FycmF5X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBPbiBzb21lIGNvbXBpbGVycyBoYXNoX3ZhbHVlIGlzbid0IGF2YWlsYWJsZSBmb3IgYXJyYXlzLCBzbyBJIHRlc3QgaXQKLS8vIHNlcGFyYXRlbHkgZnJvbSB0aGUgbWFpbiBhcnJheSB0ZXN0cy4KLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0jICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCi0jICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jICBlbHNlCi0jICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotCi12b2lkIGFycmF5X2ludF90ZXN0KCkKLXsKLSAgICBjb25zdCBpbnQgYXJyYXkxWzI1XSA9IHsKLSAgICAgICAgMjYsIC00MywgMzIsIDY1LCA0NSwKLSAgICAgICAgMTIsIDY3LCAzMiwgMTIsIDIzLAotICAgICAgICAwLCAwLCAwLCAwLCAwLAotICAgICAgICA4LCAtMTIsIDIzLCA2NSwgNDUsCi0gICAgICAgIC0xLCA5MywgLTU0LCA5ODcsIDMKLSAgICB9OwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50WzI1XT4gaGFzaGVyMTsKLQotICAgIGludCBhcnJheTJbMV0gPSB7M307Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMV0+IGhhc2hlcjI7Ci0KLSAgICBpbnQgYXJyYXkzWzJdID0gezIsIDN9OwotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50WzJdPiBoYXNoZXIzOwotCi0gICAgQk9PU1RfVEVTVChoYXNoZXIxKGFycmF5MSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShhcnJheTEpKTsKLSAgICBCT09TVF9URVNUKGhhc2hlcjIoYXJyYXkyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGFycmF5MikpOwotICAgIEJPT1NUX1RFU1QoaGFzaGVyMyhhcnJheTMpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoYXJyYXkzKSk7Ci19Ci0KLXZvaWQgdHdvX2RpbWVuc2lvbmFsX2FycmF5X3Rlc3QoKQotewotICAgIGludCBhcnJheVszXVsyXSA9IHt7LTUsIDZ9LCB7NywgLTN9LCB7MjYsIDF9fTsKLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFszXVsyXT4gaGFzaGVyOwotCi0gICAgQk9PU1RfVEVTVChoYXNoZXIoYXJyYXkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoYXJyYXkpKTsKLX0KLQotI2VuZGlmCi0KLWludCBtYWluKCkKLXsKLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotICAgIGFycmF5X2ludF90ZXN0KCk7Ci0gICAgdHdvX2RpbWVuc2lvbmFsX2FycmF5X3Rlc3QoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92ZWN0b3JfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdmVjdG9yX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWFiN2ZmLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92ZWN0b3JfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUwotIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgotIyAgZWxzZQotIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgotCi0jaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotdXNpbmcgc3RkOjp2ZWN0b3I7Ci0jZGVmaW5lIENPTlRBSU5FUl9UWVBFIHZlY3RvcgotI2luY2x1ZGUgIi4vaGFzaF9zZXF1ZW5jZV90ZXN0LmhwcCIKLQotI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCi0KLWludCBtYWluKCkKLXsKLSNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwotICAgIHZlY3Rvcl90ZXN0czo6dmVjdG9yX2hhc2hfaW50ZWdlcl90ZXN0cygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaW1wbGljaXRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2ltcGxpY2l0X3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTdkOGRlLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaW1wbGljaXRfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDEwIERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLQotbmFtZXNwYWNlIHRlc3QKLXsKLSAgICBzdHJ1Y3QgYmFzZSB7fTsKLSAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGJhc2UgY29uc3QmKSB7IHJldHVybiAwOyB9Ci0gICAgCi0gICAgc3RydWN0IGNvbnZlcnRzIHsgb3BlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGJhc2UoKTsgfSB9OwotfQotCi1pbnQgbWFpbigpIHsKLSAgICBuZG5ib29zdDo6aGFzaDx0ZXN0Ojpjb252ZXJ0cz4gaGFzaDsKLSAgICB0ZXN0Ojpjb252ZXJ0cyB4OwotICAgIAotICAgIGhhc2goeCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfZXh0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX2V4dF90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YWY1Ni4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfZXh0X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jZGVmaW5lIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0UgbmRuYm9vc3QKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLWludCBmKHN0ZDo6c2l6ZV90IGhhc2gxLCBpbnQqIHgxKSB7Ci0KLSAgICAvLyBDaGVjayB0aGF0IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4gd29ya3MgaW4gYm90aCBmaWxlcy4KLSAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludCo+IHB0cl9oYXNoZXI7Ci0gICAgQk9PU1RfVEVTVChoYXNoMSA9PSBwdHJfaGFzaGVyKHgxKSk7Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQotCi0gICAgLy8gQ2hlY2sgdGhhdCBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gaXMgYXZhaWFibGUgaW4gdGhpcyBmaWxlLgotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiB4OwotICAgIHgucHVzaF9iYWNrKCp4MSk7Ci0gICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gPiB2ZWN0b3JfaGFzaGVyOwotICAgIHJldHVybiB2ZWN0b3JfaGFzaGVyKHgpICE9IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoeCk7Ci0gICAgCi0jZWxzZQotCi0gICAgcmV0dXJuIDA7Ci0KLSNlbmRpZgotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfbm9fZXh0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX25vX2V4dF90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlZTZkZi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfbm9fZXh0X3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jZGVmaW5lIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0UgbmRuYm9vc3QKLSNkZWZpbmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+Ci0KLWV4dGVybiBpbnQgZihzdGQ6OnNpemVfdCwgaW50Kik7Ci0KLWludCBtYWluKCkgewotICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4gcHRyX2hhc2hlcjsKLSAgICBpbnQgeCA9IDU1OwotICAgIEJPT1NUX1RFU1QoIWYocHRyX2hhc2hlcigmeCksICZ4KSk7Ci0gICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWUyNjIuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaW5jbHVkZSAiLi9jb25maWcuaHBwIgotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KLQotZXh0ZXJuIGludCBmKCk7Ci1pbnQgbWFpbigpIHsgcmV0dXJuIGYoKTsgfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX3Rlc3RfMi5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdF8yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJlZmZjOC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdF8yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKLQotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0KLWludCBmKCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9uYW1lc3BhY2VfZmFpbF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbmFtZXNwYWNlX2ZhaWxfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjlmYzYuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9uYW1lc3BhY2VfZmFpbF90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IDIwMDkgRGFuaWVsIEphbWVzLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vIENoZWNrIHRoYXQgSSBoYXZlbid0IGluYWR2ZXJ0YW50bHkgcHVsbGVkIG5hbWVzcGFjZSBzdGQgaW50byB0aGUgZ2xvYmFsCi0vLyBuYW1lc3BhY2UuCi0KLSNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCi0KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+Ci0KLXR5cGVkZWYgbGlzdDxpbnQ+IGZvbzsKLQotaW50IG1haW4oKSB7fQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkOGJhYy4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+Ci0gIDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA2LjAiPgotICA8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5FZGl0b3IuRG9jdW1lbnQiPgotCi0gIDx0aXRsZT5Cb29zdCBGdW5jdGlvbiBPYmplY3QgQWRhcHRlciBMaWJyYXJ5PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+Ci0gIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiMwMDdGN0YiIGNlbGxwYWRkaW5nPSIyIiBzdW1tYXJ5PSIiPgotICAgIDx0cj4KLSAgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9Ci0gICAgICAiYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+SG9tZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uL2xpYnJhcmllcy5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkxpYnJhcmllczwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9wZW9wbGUuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5QZW9wbGU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9tb3JlL2ZhcS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkZBUTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL21vcmUvaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5Nb3JlPC9iaWc+PC9mb250PjwvYT48L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0KLSAgPGgxPkltcHJvdmVkIEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyczwvaDE+Ci0KLSAgPHA+VGhlIGhlYWRlciA8YSBocmVmPSIuLi8uLi9ib29zdC9mdW5jdGlvbmFsLmhwcCI+ZnVuY3Rpb25hbC5ocHA8L2E+Ci0gIHByb3ZpZGVzIGVuaGFuY2VtZW50cyB0byB0aGUgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzIHNwZWNpZmllZCBpbiB0aGUgQysrCi0gIFN0YW5kYXJkIExpYnJhcnkgKHNlY3Rpb25zIDIwLjMuNSwgdGhyb3VnaCB0byAyMC4zLjgpLiBUaGUgZW5oYW5jZW1lbnRzIGFyZQotICBwcmluY2lwYWxseSBwb3NzaWJsZSBkdWUgdG8gdHdvIGNoYW5nZXM6PC9wPgotCi0gIDxvbD4KLSAgICA8bGk+V2UgdXNlIHRoZSBCb29zdCA8dHQ+PGEgaHJlZj0KLSAgICAiLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGxfdHJhaXRzPC9hPjwvdHQ+IHRlbXBsYXRlcyB0byBhdm9pZCB0aGUKLSAgICBwcm9ibGVtIG9mIDxhIGhyZWY9ImJpbmRlcnMuaHRtbCNyZWZyZWYiPnJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlczwvYT4sCi0gICAgYW5kIHRvIGltcHJvdmUgdGhlIGVmZmljaWVuY3kgb2YgPGEgaHJlZj0ibWVtX2Z1bi5odG1sI2FyZ3MiPnBhcmFtZXRlcgotICAgIHBhc3Npbmc8L2E+LjwvbGk+Ci0KLSAgICA8bGk+V2UgdXNlIHR3byA8YSBocmVmPSJmdW5jdGlvbl90cmFpdHMuaHRtbCI+ZnVuY3Rpb24gb2JqZWN0IHRyYWl0czwvYT4KLSAgICBjbGFzcyB0ZW1wbGF0ZXMgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIDx0dD48YSBocmVmPQotICAgICJwdHJfZnVuLmh0bWwiPnB0cl9mdW48L2E+PC90dD4gd2l0aCB0aGUgYWRhcHRlcnMgaW4gdGhpcyBsaWJyYXJ5LjwvbGk+Ci0gIDwvb2w+Ci0KLSAgPGgzPkNvbnRlbnRzPC9oMz4KLQotICA8cD5UaGUgaGVhZGVyIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYW5kIGNsYXNzIHRlbXBsYXRlczo8L3A+Ci0KLSAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjUiIHN1bW1hcnk9IiI+Ci0gICAgPHRyPgotICAgICAgPHRoIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJmdW5jdGlvbl90cmFpdHMuaHRtbCI+RnVuY3Rpb24gb2JqZWN0Ci0gICAgICB0cmFpdHM8L2E+PC90aD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+dW5hcnlfdHJhaXRzPGJyPgotICAgICAgYmluYXJ5X3RyYWl0czwvdHQ+PC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj5Vc2VkIHRvIGRldGVybWluZSB0aGUgdHlwZXMgb2YgZnVuY3Rpb24gb2JqZWN0cycgYW5kCi0gICAgICBmdW5jdGlvbnMnIGFyZ3VtZW50cy4gRWxpbWluYXRlIHRoZSBuZWNlc3NpdHkgZm9yCi0gICAgICA8dHQ+cHRyX2Z1bjwvdHQ+LjwvdGQ+Ci0gICAgPC90cj4KLQotICAgIDx0cj4KLSAgICAgIDx0aCBhbGlnbj0ibGVmdCI+PGEgaHJlZj0ibmVnYXRvcnMuaHRtbCI+TmVnYXRvcnM8L2E+PC90aD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+dW5hcnlfbmVnYXRlPGJyPgotICAgICAgYmluYXJ5X25lZ2F0ZTxicj4KLSAgICAgIG5vdDE8YnI+Ci0gICAgICBub3QyPC90dD48L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPkJhc2VkIG9uIHNlY3Rpb24gMjAuMy41IG9mIHRoZSBzdGFuZGFyZC48L3RkPgotICAgIDwvdHI+Ci0KLSAgICA8dHI+Ci0gICAgICA8dGggYWxpZ249ImxlZnQiPjxhIGhyZWY9ImJpbmRlcnMuaHRtbCI+QmluZGVyczwvYT48L3RoPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5iaW5kZXIxc3Q8YnI+Ci0gICAgICBiaW5kZXIybmQ8YnI+Ci0gICAgICBiaW5kMXN0PGJyPgotICAgICAgYmluZDJuZDwvdHQ+PC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj5CYXNlZCBvbiBzZWN0aW9uIDIwLjMuNiBvZiB0aGUgc3RhbmRhcmQuPC90ZD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRoIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJwdHJfZnVuLmh0bWwiPkFkYXB0ZXJzIGZvciBwb2ludGVycyB0bwotICAgICAgZnVuY3Rpb25zPC9hPjwvdGg+Ci0KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248YnI+Ci0gICAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxicj4KLSAgICAgIHB0cl9mdW48L3R0PjwvdGQ+Ci0KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+QmFzZWQgb24gc2VjdGlvbiAyMC4zLjcgb2YgdGhlIHN0YW5kYXJkLiBOb3QgcmVxdWlyZWQKLSAgICAgIGZvciB1c2Ugd2l0aCB0aGlzIGxpYnJhcnkgc2luY2UgdGhlIGJpbmRlcnMgYW5kIG5lZ2F0b3JzIGNhbiBhZGFwdAotICAgICAgZnVuY3Rpb25zLCBidXQgbWF5IGJlIG5lZWRlZCB3aXRoIHRoaXJkIHBhcnR5IGFkYXB0ZXJzLjwvdGQ+Ci0gICAgPC90cj4KLQotICAgIDx0cj4KLSAgICAgIDx0aCBhbGlnbj0ibGVmdCI+PGEgaHJlZj0ibWVtX2Z1bi5odG1sIj5BZGFwdGVycyBmb3IgcG9pbnRlcnMgdG8gbWVtYmVyCi0gICAgICBmdW5jdGlvbnM8L2E+PC90aD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+bWVtX2Z1bl90PGJyPgotICAgICAgbWVtX2Z1bjFfdDxicj4KLSAgICAgIGNvbnN0X21lbV9mdW5fdDxicj4KLSAgICAgIGNvbnN0X21lbV9mdW4xX3Q8YnI+Ci0gICAgICBtZW1fZnVuX3JlZl90PGJyPgotICAgICAgbWVtX2Z1bjFfcmVmX3Q8YnI+Ci0gICAgICBjb25zdF9tZW1fZnVuX3JlZl90PGJyPgotICAgICAgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8YnI+Ci0gICAgICBtZW1fZnVuPGJyPgotICAgICAgbWVtX2Z1bl9yZWY8L3R0PjwvdGQ+Ci0KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+QmFzZWQgb24gc2VjdGlvbiAyMC4zLjggb2YgdGhlIHN0YW5kYXJkLjwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLQotICA8aDM+VXNhZ2U8L2gzPgotCi0gIDxwPlVzaW5nIHRoZXNlIGFkYXB0ZXJzIHNob3VsZCBiZSBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyB1c2luZyB0aGUKLSAgc3RhbmRhcmQgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzOyB0aGUgb25seSBkaWZmZXJlbmNlcyBhcmUgdGhhdCB5b3UgbmVlZAotICB0byB3cml0ZSA8dHQ+Ym9vc3Q6OjwvdHQ+IGluc3RlYWQgb2YgPHR0PnN0ZDo6PC90dD4sIGFuZCB0aGF0IHlvdSB3aWxsIGdldAotICBmZXdlciBoZWFkYWNoZXMuPC9wPgotCi0gIDxwPkZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgYSA8dHQ+UGVyc29uPC90dD4gY2xhc3MgdGhhdCBjb250YWluZWQgYQotICA8dHQ+c2V0X25hbWU8L3R0PiBmdW5jdGlvbjo8L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLWNsYXNzIFBlcnNvbgotewotICBwdWJsaWM6Ci0gICAgdm9pZCBzZXRfbmFtZShjb25zdCBzdGQ6OnN0cmluZyAmYW1wO25hbWUpOwotICAvLyAuLi4KLX07Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPllvdSBjb3VsZCByZW5hbWUgYSBidW5jaCBvZiBwZW9wbGUgaW4gYSBjb2xsZWN0aW9uLCA8dHQ+YzwvdHQ+LCBieQotICB3cml0aW5nPC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci1zdGQ6OmZvcl9lYWNoKGMuYmVnaW4oKSwgYy5lbmQoKSwgCi0gICAgICAgICAgICAgIGJvb3N0OjpiaW5kMm5kKGJvb3N0OjptZW1fZnVuX3JlZigmYW1wO1BlcnNvbjo6c2V0X25hbWUpLCAiRnJlZCIpKTsKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+SWYgdGhlIHN0YW5kYXJkIGFkYXB0ZXJzIGhhZCBiZWVuIHVzZWQgaW5zdGVhZCB0aGVuIHRoaXMgY29kZSB3b3VsZAotICBub3JtYWxseSBmYWlsIHRvIGNvbXBpbGUsIGJlY2F1c2UgPHR0PnNldF9uYW1lPC90dD4gdGFrZXMgYSByZWZlcmVuY2UKLSAgYXJndW1lbnQuIFJlZmVyIHRvIHRoZSBjb21tZW50cyBpbiB0aGUgPGEgaHJlZj0iYmluZGVycy5odG1sI3JlZnJlZiI+YmluZGVyCi0gIGRvY3VtZW50YXRpb248L2E+IHRvIGV4cGxhaW4gd2h5IHRoaXMgaXMgc28uPC9wPgotCi0gIDxoMz5Db21waWxlciBDb21wYXRpYmlsaXR5PC9oMz4KLQotICA8cD5UaGUgaGVhZGVyIGFuZCA8YSBocmVmPSJ0ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwIj50ZXN0IHByb2dyYW08L2E+IGhhdmUgYmVlbgotICBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcGlsZXJzOjwvcD4KLQotICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSIgc3VtbWFyeT0iIj4KLSAgICA8dHI+Ci0gICAgICA8dGg+Q29tcGlsZXI8L3RoPgotCi0gICAgICA8dGg+Q29tbWVudHM8L3RoPgotICAgIDwvdHI+Ci0KLSAgICA8dHI+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPkJvcmxhbmQgQysrQnVpbGRlciA0IFVwZGF0ZSAyPC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj5ObyBrbm93biBpc3N1ZXMuPC90ZD4KLSAgICA8L3RyPgotCi0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj5Cb3JsYW5kIEMrKyA1LjU8L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPk5vIGtub3duIGlzc3Vlcy48L3RkPgotICAgIDwvdHI+Ci0KLSAgICA8dHI+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPmcrKyAyLjk1LjI8L3RkPgotCi0gICAgICA8dGQgdmFsaWduPSJ0b3AiPk5vIGtub3duIGlzc3Vlcy48L3RkPgotICAgIDwvdHI+Ci0KLSAgICA8dHI+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPk1pY3Jvc29mdCBWaXN1YWwgQysrIFNlcnZpY2UgUGFjayAzPC90ZD4KLQotICAgICAgPHRkIHZhbGlnbj0idG9wIj4KLSAgICAgICAgQ29tcGlsZXIgbGFja3MgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwgc28gdGhpcyBsaWJyYXJ5IG9mZmVycyBsaXR0bGUKLSAgICAgICAgbW9yZSB0aGFuIGlzIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZCBhZGFwdGVyczoKLQotICAgICAgICA8dWw+Ci0gICAgICAgICAgPGxpPlRoZSA8dHQ+Y2FsbF90cmFpdHM8L3R0PiBtZWNoYW5pc20gaXMgdW5hYmxlIHRvIHByZXZlbnQKLSAgICAgICAgICByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMsIGFuZCBzbyB0aGUgYWRhcHRlcnMgaW4gdGhpcyBsaWJyYXJ5IHdpbGwKLSAgICAgICAgICBiZSB1c2FibGUgaW4gZmV3ZXIgc2l0dWF0aW9ucy48L2xpPgotCi0gICAgICAgICAgPGxpPlRoZSA8dHQ+ZnVuY3Rpb25fdHJhaXRzPC90dD4gbWVjaGFuaXNtIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUKLSAgICAgICAgICB0aGUgYXJndW1lbnQgYW5kIHJlc3VsdCB0eXBlcyBvZiBmdW5jdGlvbnMsIHRoZXJlZm9yZQotICAgICAgICAgIDx0dD5wdHJfZnVuPC90dD4gY29udGludWVzIHRvIGJlIHJlcXVpcmVkIHRvIGFkYXB0IGZ1bmN0aW9ucy48L2xpPgotICAgICAgICA8L3VsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDxoMz5GdXR1cmUgRGlyZWN0aW9uczwvaDM+Ci0KLSAgPHA+VGhpcyBsaWJyYXJ5J3MgcHJpbWFyeSBmb2N1cyBpcyB0byBzb2x2ZSB0aGUgcHJvYmxlbSBvZiByZWZlcmVuY2VzIHRvCi0gIHJlZmVyZW5jZXMgd2hpbGUgbWFpbnRhaW5pbmcgYXMgbXVjaCBjb21wYXRpYmlsaXR5IGFzIHBvc3NpYmxlIHdpdGggdGhlCi0gIHN0YW5kYXJkIGxpYnJhcnkuIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHRlY2huaXF1ZXMgeW91IHJlYWQgYWJvdXQgaW4KLSAgYm9va3MgYW5kIG1hZ2F6aW5lcyB3aXRoIG1hbnkgb2YgdG9kYXkncyBjb21waWxlcnMuPC9wPgotCi0gIDxwPkluIHRoZSBsb25nZXIgdGVybSwgZXZlbiBiZXR0ZXIgc29sdXRpb25zIGFyZSBsaWtlbHk6PC9wPgotCi0gIDxvbD4KLSAgICA8bGk+U2V2ZXJhbCBCb29zdCBtZW1iZXJzIGFyZSB3b3JraW5nIG9uIGV4cHJlc3Npb24gdGVtcGxhdGUgbGlicmFyaWVzLgotICAgIFRoZXNlIHdpbGwgYWxsb3cgYSBtb3JlIG5hdHVyYWwgc3ludGF4IGZvciBjb21iaW5pbmcgYW5kIGFkYXB0aW5nCi0gICAgZnVuY3Rpb25zLiBBcyB0aGlzIGlzIGEgbmV3IHRlY2hub2xvZ3ksIGl0IG1heSBiZSBzb21lIHRpbWUgYmVmb3JlIGl0IGhhcwotICAgIG1hdHVyZWQgYW5kIGlzIHdpZGVseSBzdXBwb3J0ZWQgYnkgbWFqb3IgY29tcGlsZXJzIGJ1dCBzaG93cyBncmVhdAotICAgIHByb21pc2UuIEluIHRoZSBtZWFudGltZSwgdGhlIGZ1bmN0aW9uYWwuaHBwIGxpYnJhcnkgZmlsbHMgdGhlIGdhcC48L2xpPgotCi0gICAgPGxpPlRoZSBTdGFuZGFyZCBDb21taXR0ZWUgaGFzIHJlY29nbmlzZWQgdGhlIHByb2JsZW0gb2YgcmVmZXJlbmNlcyB0bwotICAgIHJlZmVyZW5jZXMgb2NjdXJyaW5nIGR1cmluZyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGFuZCBoYXMgbW92ZWQgdG8gZml4Ci0gICAgdGhlIHN0YW5kYXJkIChzZWUgdGhlIDxhIGhyZWY9Ci0gICAgImh0dHA6Ly9hbnViaXMuZGt1dWcuZGsvanRjMS9zYzIyL3dnMjEvZG9jcy9jd2dfYWN0aXZlLmh0bWwjMTA2Ij5DKysKLSAgICBzdGFuZGFyZCBjb3JlIGxhbmd1YWdlIGFjdGl2ZSBpc3N1ZXMgbGlzdDwvYT4pLjwvbGk+Ci0gIDwvb2w+Ci0KLSAgPGgzPkF1dGhvcjwvaDM+Ci0KLSAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL21hcmtfcm9kZ2Vycy5odG0iPk1hcmsgUm9kZ2VyczwvYT48L3A+Ci0KLSAgPGgzPkFja25vd2xlZGdlbWVudHM8L2gzPgotCi0gIDxwPlRoYW5rcyB0byA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvam9obl9tYWRkb2NrLmh0bSI+Sm9obiBNYWRkb2NrPC9hPiBmb3IKLSAgc3VnZ2VzdGluZyB0aGUgbWVjaGFuaXNtIHRoYXQgYWxsb3dlZCB0aGUgZnVuY3Rpb24gb2JqZWN0cyB0cmFpdHMgdG8gd29yawotICBjb3JyZWN0bHkuIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9qZW5zX21hdXJlci5odG0iPkplbnMgTWF1cmVyPC9hPiBwcm92aWRlZAotICBpbnZhbHVhYmxlIGZlZWRiYWNrIGR1cmluZyB0aGUgPGEgaHJlZj0KLSAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZm9ybWFsX3Jldmlld19wcm9jZXNzLmh0bSI+Zm9ybWFsIHJldmlldyBwcm9jZXNzPC9hPi48L3A+Ci0gIDxocj4KLQotICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KLSAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKLSAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgotCi0gIDxwPlJldmlzZWQgCi0gIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKLSAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+Ci0KLSAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+Ci0KLSAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgotICBjb3B5IGF0IDxhIGhyZWY9Ci0gICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9tZW1fZnVuLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvbWVtX2Z1bi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2RjMTAyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9tZW1fZnVuLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuLXVzIj4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiPgotCi0gIDx0aXRsZT5Cb29zdCBGdW5jdGlvbiBPYmplY3QgQWRhcHRlciBMaWJyYXJ5PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+Ci0gIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiMwMDdGN0YiIGNlbGxwYWRkaW5nPSIyIiBzdW1tYXJ5PSIiPgotICAgIDx0cj4KLSAgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9Ci0gICAgICAiYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+SG9tZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uL2xpYnJhcmllcy5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkxpYnJhcmllczwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9wZW9wbGUuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5QZW9wbGU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9tb3JlL2ZhcS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkZBUTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL21vcmUvaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5Nb3JlPC9iaWc+PC9mb250PjwvYT48L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0KLSAgPGgxPk1lbWJlciBGdW5jdGlvbiBBZGFwdGVyczwvaDE+Ci0KLSAgPHA+VGhlIGhlYWRlciA8YSBocmVmPSIuLi8uLi9ib29zdC9mdW5jdGlvbmFsLmhwcCI+ZnVuY3Rpb25hbC5ocHA8L2E+Ci0gIGluY2x1ZGVzIGltcHJvdmVkIHZlcnNpb25zIG9mIHRoZSBmdWxsIHJhbmdlIG9mIG1lbWJlciBmdW5jdGlvbiBhZGFwdGVycwotICBmcm9tIHRoZSB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkgKCZzZWN0OzIwLjMuOCk6PC9wPgotCi0gIDx1bD4KLSAgICA8bGk+PHR0Pm1lbV9mdW5fdDwvdHQ+PC9saT4KLQotICAgIDxsaT48dHQ+bWVtX2Z1bjFfdDwvdHQ+PC9saT4KLQotICAgIDxsaT48dHQ+Y29uc3RfbWVtX2Z1bl90PC90dD48L2xpPgotCi0gICAgPGxpPjx0dD5jb25zdF9tZW1fZnVuMV90PC90dD48L2xpPgotCi0gICAgPGxpPjx0dD5tZW1fZnVuX3JlZl90PC90dD48L2xpPgotCi0gICAgPGxpPjx0dD5tZW1fZnVuMV9yZWZfdDwvdHQ+PC9saT4KLQotICAgIDxsaT48dHQ+Y29uc3RfbWVtX2Z1bl9yZWZfdDwvdHQ+PC9saT4KLQotICAgIDxsaT48dHQ+Y29uc3RfbWVtX2Z1bjFfcmVmX3Q8L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+YXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBvdmVybG9hZGVkIGhlbHBlciBmdW5jdGlvbnM8L3A+Ci0KLSAgPHVsPgotICAgIDxsaT48dHQ+bWVtX2Z1bjwvdHQ+PC9saT4KLQotICAgIDxsaT48dHQ+bWVtX2Z1bl9yZWY8L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+VGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBhZGFwdGVycyBhcyBzcGVjaWZpZWQgaW4gdGhlCi0gIFN0YW5kYXJkOjwvcD4KLQotICA8dWw+Ci0gICAgPGxpPlRoZSA8dHQ+Zmlyc3RfYXJndW1lbnRfdHlwZTwvdHQ+IHR5cGVkZWYgaGFzIGJlZW4gY29ycmVjdGVkIGZvciB0aGUKLSAgICA8dHQ+Y29uc3RfPC90dD4gZmFtaWx5IG9mIG1lbWJlciBmdW5jdGlvbiBhZGFwdGVycyAoc2VlIDxhIGhyZWY9Ci0gICAgIiNmaXJzdGFyZyI+YmVsb3c8L2E+KS48L2xpPgotCi0gICAgPGxpPlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gPHR0Pm1lbV9mdW4xX3Q8L3R0PiBhbmQgaXRzIHZhcmlhbnRzIGlzIHBhc3NlZAotICAgIHVzaW5nIHRoZSA8dHQ+Y2FsbF90cmFpdHM6OnBhcmFtX3R5cGU8L3R0PiBmb3IgdGhlIG1lbWJlciBmdW5jdGlvbidzCi0gICAgYXJndW1lbnQgdHlwZS48L2xpPgotICA8L3VsPgotCi0gIDxoMyBpZD0iZmlyc3RhcmciPmZpcnN0X2FyZ3VtZW50X3R5cGU8L2gzPgotCi0gIDxwPlRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgPHR0PmNvbnN0X21lbV9mdW4xX3Q8L3R0PiwgZm9yIGV4YW1wbGUsIGxpa2UKLSAgdGhpczo8L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLXRlbXBsYXRlICZsdDtjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBBJmd0OyBjbGFzcyBjb25zdF9tZW1fZnVuMV90Ci0gIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbiZsdDs8c3Ryb25nPlQqPC9zdHJvbmc+LCBBLCBTJmd0OyB7Ci1wdWJsaWM6Ci0gIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoUyAoVDo6KnApKEEpIGNvbnN0KTsKLSAgUyBvcGVyYXRvcigpKDxzdHJvbmc+Y29uc3QgVCo8L3N0cm9uZz4gcCwgQSB4KSBjb25zdDsKLX07Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPk5vdGUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gPHR0PmJpbmFyeV9mdW5jdGlvbjwvdHQ+IGlzIDx0dD5UKjwvdHQ+Ci0gIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gPHR0Pm9wZXJhdG9yKCk8L3R0PiBpcyBhY3R1YWxseQotICBvZiB0eXBlIDx0dD48ZW0+Y29uc3Q8L2VtPiZuYnNwO1QqPC90dD4uPC9wPgotCi0gIDxwPkRvZXMgdGhpcyBtYXR0ZXI/IFdlbGwsIGNvbnNpZGVyIHdoYXQgaGFwcGVucyB3aGVuIHdlIHdyaXRlPC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci1zdHJ1Y3QgRm9vIHsgdm9pZCBiYXIoaW50KSBjb25zdDsgfTsKLWNvbnN0IEZvbyAqY3AgPSBuZXcgRm9vOwotc3RkOjpiaW5kMXN0KHN0ZDo6bWVtX2Z1bigmYW1wO0Zvbzo6YmFyKSwgY3ApOwotPC9wcmU+Ci0gIDwvYmxvY2txdW90ZT4KLQotICA8cD5XZSBoYXZlIGNyZWF0ZWQgYSA8dHQ+Y29uc3RfbWVtX2Z1bjFfdDwvdHQ+IG9iamVjdCB3aGljaCB3aWxsCi0gIGVmZmVjdGl2ZWx5IGNvbnRhaW4gdGhlIGZvbGxvd2luZzwvcD4KLQotICA8YmxvY2txdW90ZT4KLSAgICA8cHJlPgotdHlwZWRlZiBGb28qIGZpcnN0X2FyZ3VtZW50X3R5cGU7Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPlRoZSA8dHQ+YmluZDFzdDwvdHQ+IHdpbGwgdGhlbiBjcmVhdGUgYSA8dHQ+YmluZGVyMXN0PC90dD4gb2JqZWN0IHRoYXQKLSAgd2lsbCB1c2UgdGhpcyA8dHQ+dHlwZWRlZjwvdHQ+IGFzIHRoZSB0eXBlIG9mIGEgbWVtYmVyIHdoaWNoIHdpbGwgYmUKLSAgaW5pdGlhbGlzZWQgd2l0aCA8dHQ+Y3A8L3R0Pi4gSW4gb3RoZXIgd29yZHMsIHdlIHdpbGwgbmVlZCB0byBpbml0aWFsaXNlIGEKLSAgPHR0PkZvbyo8L3R0PiBtZW1iZXIgd2l0aCBhIDx0dD5jb25zdCZuYnNwO0Zvbyo8L3R0PiBwb2ludGVyISBDbGVhcmx5IHRoaXMKLSAgaXMgbm90IHBvc3NpYmxlLCBzbyB0byBpbXBsZW1lbnQgdGhpcyB5b3VyIFN0YW5kYXJkIExpYnJhcnkgdmVuZG9yIHdpbGwKLSAgaGF2ZSBoYWQgdG8gY2FzdCBhd2F5IHRoZSBjb25zdG5lc3Mgb2YgPHR0PmNwPC90dD4sIHByb2JhYmx5IHdpdGhpbiB0aGUKLSAgYm9keSBvZiA8dHQ+YmluZDFzdDwvdHQ+LjwvcD4KLQotICA8cD5UaGlzIGhhY2sgd2lsbCBub3Qgc3VmZmljZSB3aXRoIHRoZSBpbXByb3ZlZCA8YSBocmVmPQotICAiYmluZGVycy5odG1sIj5iaW5kZXJzPC9hPiBpbiB0aGlzIGxpYnJhcnksIHNvIHdlIGhhdmUgaGFkIHRvIHByb3ZpZGUKLSAgY29ycmVjdGVkIHZlcnNpb25zIG9mIHRoZSBtZW1iZXIgZnVuY3Rpb24gYWRhcHRlcnMgYXMgd2VsbC48L3A+Ci0KLSAgPGgzIGlkPSJhcmdzIj5Bcmd1bWVudCBUeXBlczwvaDM+Ci0KLSAgPHA+VGhlIHN0YW5kYXJkIGRlZmluZXMgPHR0Pm1lbV9mdW4xX3Q8L3R0PiwgZm9yIGV4YW1wbGUsIGxpa2UgdGhpcwotICAoJnNlY3Q7MjAuMy44Jm5ic3A7JnBhcmE7Mik6PC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci10ZW1wbGF0ZSAmbHQ7Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQSZndDsgY2xhc3MgbWVtX2Z1bjFfdAotICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb24mbHQ7VCosIEEsIFMmZ3Q7IHsKLXB1YmxpYzoKLSAgZXhwbGljaXQgbWVtX2Z1bjFfdChTIChUOjoqcCkoPHN0cm9uZz5BPC9zdHJvbmc+KSk7Ci0gIFMgb3BlcmF0b3IoKShUKiBwLCA8c3Ryb25nPkE8L3N0cm9uZz4geCkgY29uc3Q7Ci19OwotPC9wcmU+Ci0gIDwvYmxvY2txdW90ZT4KLQotICA8cD5Ob3RlIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCB0byA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGlzIGV4YWN0bHkgdGhlIHNhbWUKLSAgdHlwZSBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIG1lbWJlciBmdW5jdGlvbi4gSWYgdGhpcyBpcyBhIHZhbHVlIHR5cGUsIHRoZQotICBhcmd1bWVudCB3aWxsIGJlIHBhc3NlZCBieSB2YWx1ZSBhbmQgY29waWVkIHR3aWNlLjwvcD4KLQotICA8cD5Ib3dldmVyLCBpZiB3ZSB3ZXJlIHRvIHRyeSBhbmQgZWxpbWluYXRlIHRoaXMgaW5lZmZpY2llbmN5IGJ5IGluc3RlYWQKLSAgZGVjbGFyaW5nIHRoZSBhcmd1bWVudCBhcyA8dHQ+Y29uc3QmbmJzcDtBJmFtcDs8L3R0PiwgdGhlbiBpZiBBIHdlcmUgYQotICByZWZlcmVuY2UgdHlwZSwgd2Ugd291bGQgaGF2ZSBhIHJlZmVyZW5jZSB0byBhIHJlZmVyZW5jZSwgd2hpY2ggaXMKLSAgY3VycmVudGx5IGlsbGVnYWwgKGJ1dCBzZWUgPGEgaHJlZj0KLSAgImh0dHA6Ly9hbnViaXMuZGt1dWcuZGsvanRjMS9zYzIyL3dnMjEvZG9jcy9jd2dfYWN0aXZlLmh0bWwjMTA2Ij5DKysgY29yZQotICBsYW5ndWFnZSBpc3N1ZSBudW1iZXIgMTA2KTwvYT48L3A+Ci0KLSAgPHA+U28gdGhlIHdheSBpbiB3aGljaCB3ZSB3YW50IHRvIGRlY2xhcmUgdGhlIHNlY29uZCBhcmd1bWVudCBmb3IKLSAgPHR0Pm9wZXJhdG9yKCk8L3R0PiBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBtZW1iZXIgZnVuY3Rpb24ncwotICBhcmd1bWVudCBpcyBhIHJlZmVyZW5jZS4gSWYgaXQgaXMgYSByZWZlcmVuY2UsIHdlIHdhbnQgdG8gZGVjbGFyZSBpdCBzaW1wbHkKLSAgYXMgPHR0PkE8L3R0PjsgaWYgaXQgaXMgYSB2YWx1ZSB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgYXMKLSAgPHR0PmNvbnN0Jm5ic3A7QSZhbXA7PC90dD4uPC9wPgotCi0gIDxwPlRoZSBCb29zdCA8YSBocmVmPSIuLi91dGlsaXR5L2NhbGxfdHJhaXRzLmh0bSI+Y2FsbF90cmFpdHM8L2E+IGNsYXNzCi0gIHRlbXBsYXRlIGNvbnRhaW5zIGEgPHR0PnBhcmFtX3R5cGU8L3R0PiB0eXBlZGVmLCB3aGljaCB1c2VzIHBhcnRpYWwKLSAgc3BlY2lhbGlzYXRpb24gdG8gbWFrZSBwcmVjaXNlbHkgdGhpcyBkZWNpc2lvbi4gQnkgZGVjbGFyaW5nIHRoZQotICA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGFzPC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci1TIG9wZXJhdG9yKCkoVCogcCwgdHlwZW5hbWUgY2FsbF90cmFpdHMmbHQ7QSZndDs6OnBhcmFtX3R5cGUgeCkgY29uc3QKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+d2UgYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1bHQgLSB3ZSBpbXByb3ZlIGVmZmljaWVuY3kgd2l0aG91dCBnZW5lcmF0aW5nCi0gIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcy48L3A+Ci0KLSAgPGgzPkxpbWl0YXRpb25zPC9oMz4KLQotICA8cD5UaGUgY2FsbCB0cmFpdHMgdGVtcGxhdGUgdXNlZCB0byByZWFsaXNlIHNvbWUgaW1wcm92ZW1lbnRzIHJlbGllcyBvbgotICBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uLCBzbyB0aGVzZSBpbXByb3ZlbWVudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uCi0gIGNvbXBpbGVycyB0aGF0IHN1cHBvcnQgdGhhdCBmZWF0dXJlLiBXaXRoIG90aGVyIGNvbXBpbGVycywgdGhlIGFyZ3VtZW50Ci0gIHBhc3NlZCB0byB0aGUgbWVtYmVyIGZ1bmN0aW9uIChpbiB0aGUgPHR0Pm1lbV9mdW4xX3Q8L3R0PiBmYW1pbHkpIHdpbGwKLSAgYWx3YXlzIGJlIHBhc3NlZCBieSByZWZlcmVuY2UsIHRodXMgZ2VuZXJhdGluZyB0aGUgcG9zc2liaWxpdHkgb2YKLSAgcmVmZXJlbmNlcyB0byByZWZlcmVuY2VzLjwvcD4KLSAgPGhyPgotCi0gIDxwPjxhIGhyZWY9Imh0dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrP3VyaT1yZWZlcmVyIj48aW1nIGJvcmRlcj0iMCIgc3JjPQotICAiLi4vLi4vZG9jL2ltYWdlcy92YWxpZC1odG1sNDAxLnBuZyIgYWx0PSJWYWxpZCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsIgotICBoZWlnaHQ9IjMxIiB3aWR0aD0iODgiPjwvYT48L3A+Ci0KLSAgPHA+UmV2aXNlZCAKLSAgPCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgcy10eXBlPSJFRElURUQiIHMtZm9ybWF0PSIlZCAlQiwgJVkiIHN0YXJ0c3BhbiAtLT4wMiBEZWNlbWJlciwgMjAwNjwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIGVuZHNwYW4gaS1jaGVja3N1bT0iMzg1MTAiIC0tPjwvcD4KLQotICA8cD48aT5Db3B5cmlnaHQgJmNvcHk7IDIwMDAgQ2FkZW56YSBOZXcgWmVhbGFuZCBMdGQuPC9pPjwvcD4KLQotICA8cD48aT5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCi0gIGNvcHkgYXQgPGEgaHJlZj0KLSAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L2k+PC9wPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL25lZ2F0b3JzLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvbmVnYXRvcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzMTc1MC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvbmVnYXRvcnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+Ci0KLSAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KLSAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+Ci0gICAgPHRyPgotICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KLSAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgotCi0gICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgotCi0gICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgotCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLQotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgotCi0gICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLQotICA8aDE+TmVnYXRvcnM8L2gxPgotCi0gIDxwPlRoZSBoZWFkZXIgPGEgaHJlZj0iLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC5ocHAiPmZ1bmN0aW9uYWwuaHBwPC9hPgotICBwcm92aWRlcyBlbmhhbmNlZCB2ZXJzaW9ucyBvZiBib3RoIHRoZSBuZWdhdG9yIGFkYXB0ZXJzIGZyb20gdGhlIEMrKwotICBTdGFuZGFyZCBMaWJyYXJ5ICgmc2VjdDsyMC4zLjUpOjwvcD4KLQotICA8dWw+Ci0gICAgPGxpPjx0dD51bmFyeV9uZWdhdGU8L3R0PjwvbGk+Ci0KLSAgICA8bGk+PHR0PmJpbmFyeV9uZWdhdGU8L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+QXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBoZWxwZXIgZnVuY3Rpb25zPC9wPgotCi0gIDx1bD4KLSAgICA8bGk+PHR0Pm5vdDE8L3R0PjwvbGk+Ci0KLSAgICA8bGk+PHR0Pm5vdDI8L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+SG93ZXZlciwgdGhlIG5lZ2F0b3JzIGluIHRoaXMgbGlicmFyeSBpbXByb3ZlIG9uIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucwotICBpbiB0d28gd2F5czo8L3A+Ci0KLSAgPHVsPgotICAgIDxsaT5UaGV5IHVzZSA8YSBocmVmPSJmdW5jdGlvbl90cmFpdHMuaHRtbCI+ZnVuY3Rpb24gb2JqZWN0IHRyYWl0czwvYT4gdG8KLSAgICBhdm9pZCB0aGUgbmVlZCBmb3IgPHR0PnB0cl9mdW48L3R0PiB3aGVuIG5lZ2F0aW5nIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4KLSAgICBhbiBhZGFwdGFibGUgZnVuY3Rpb24gb2JqZWN0LjwvbGk+Ci0KLSAgICA8bGk+VGhleSB1c2UgQm9vc3QgPGEgaHJlZj0KLSAgICAiLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGwmbmJzcDt0cmFpdHM8L2E+IHRvIGRldGVybWluZSB0aGUgYmVzdAotICAgIHdheSB0byBkZWNsYXJlIHRoZWlyIGFyZ3VtZW50cyBhbmQgcGFzcyB0aGVtIHRocm91Z2ggdG8gdGhlIGFkYXB0ZWQKLSAgICBmdW5jdGlvbiAoc2VlIDxhIGhyZWY9IiNhcmd1bWVudHMiPmJlbG93PC9hPikuPC9saT4KLSAgPC91bD4KLQotICA8aDM+VXNhZ2U8L2gzPgotCi0gIDxwPlVzYWdlIGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQgbmVnYXRvcnMuIEZvciBleGFtcGxlLDwvcD4KLQotICA8YmxvY2txdW90ZT4KLSAgICA8cHJlPgotYm9vbCBiYWQoY29uc3QgRm9vICZhbXA7Zm9vKSB7IC4uLiB9Ci0uLi4KLXN0ZDo6dmVjdG9yJmx0O0ZvbyZndDsgYzsKLS4uLgotc3RkOjpmaW5kX2lmKGMuYmVnaW4oKSwgYy5lbmQoKSwgYm9vc3Q6Om5vdDEoYmFkKSk7Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxoMyBpZD0iYXJndW1lbnRzIj5Bcmd1bWVudCBUeXBlczwvaDM+Ci0KLSAgPHA+VGhlIEMrKyBTdGFuZGFyZCAoJnNlY3Q7MjAuMy41KSBkZWZpbmVzIHVuYXJ5IG5lZ2F0ZSBsaWtlIHRoaXMgKGJpbmFyeQotICBuZWdhdGUgaXMgc2ltaWxhcik6PC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci10ZW1wbGF0ZSAmbHQ7Y2xhc3MgUHJlZGljYXRlJmd0OwotICBjbGFzcyB1bmFyeV9uZWdhdGUKLSAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbiZsdDt0eXBlbmFtZSBQcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsYm9vbCZndDsgewotcHVibGljOgotICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgUHJlZGljYXRlJmFtcDsgcHJlZCk7Ci0gIGJvb2wgb3BlcmF0b3IoKSg8c3Ryb25nPmNvbnN0IHR5cGVuYW1lIFByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSZhbXA7PC9zdHJvbmc+IHgpIGNvbnN0OwotfTsKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+Tm90ZSB0aGF0IGlmIHRoZSBQcmVkaWNhdGUncyA8dHQ+YXJndW1lbnRfdHlwZTwvdHQ+IGlzIGEgcmVmZXJlbmNlLCB0aGUKLSAgdHlwZSBvZiA8dHQ+b3BlcmF0b3IoKTwvdHQ+J3MgYXJndW1lbnQgd291bGQgYmUgYSByZWZlcmVuY2UgdG8gYSByZWZlcmVuY2UuCi0gIEN1cnJlbnRseSB0aGlzIGlzIGlsbGVnYWwgaW4gQysrIChidXQgc2VlIHRoZSA8YSBocmVmPQotICAiaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMxMDYiPkMrKwotICBzdGFuZGFyZCBjb3JlIGxhbmd1YWdlIGFjdGl2ZSBpc3N1ZXMgbGlzdDwvYT4pLjwvcD4KLQotICA8cD5Ib3dldmVyLCBpZiB3ZSBpbnN0ZWFkIGRlZmluZWQgPHR0Pm9wZXJhdG9yKCk8L3R0PiB0byBhY2NlcHQgUHJlZGljYXRlJ3MKLSAgYXJndW1lbnRfdHlwZSB1bm1vZGlmaWVkLCB0aGlzIHdvdWxkIGJlIG5lZWRsZXNzbHkgaW5lZmZpY2llbnQgaWYgaXQgd2VyZSBhCi0gIHZhbHVlIHR5cGU7IHRoZSBhcmd1bWVudCB3b3VsZCBiZSBjb3BpZWQgdHdpY2UgLSBvbmNlIHdoZW4gY2FsbGluZwotICA8dHQ+dW5hcnlfbmVnYXRlPC90dD4ncyA8dHQ+b3BlcmF0b3IoKTwvdHQ+LCBhbmQgYWdhaW4gd2hlbgotICA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGNhbGxlZCB0aGUgYWRhcHRlZCBmdW5jdGlvbi48L3A+Ci0KLSAgPHA+U28gaG93IHdlIHdhbnQgdG8gZGVjbGFyZSB0aGUgYXJndW1lbnQgZm9yIDx0dD5vcGVyYXRvcigpPC90dD4gZGVwZW5kcwotICBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgUHJlZGljYXRlJ3MgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PiBpcyBhIHJlZmVyZW5jZS4gSWYKLSAgaXQgaXMgYSByZWZlcmVuY2UsIHdlIHdhbnQgdG8gZGVjbGFyZSBpdCBzaW1wbHkgYXMgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PjsKLSAgaWYgaXQgaXMgYSB2YWx1ZSB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgYXMKLSAgPHR0PmNvbnN0Jm5ic3A7YXJndW1lbnRfdHlwZSZhbXA7PC90dD4uPC9wPgotCi0gIDxwPlRoZSBCb29zdCA8YSBocmVmPSIuLi91dGlsaXR5L2NhbGxfdHJhaXRzLmh0bSI+Y2FsbF90cmFpdHM8L2E+IGNsYXNzCi0gIHRlbXBsYXRlIGNvbnRhaW5zIGEgPHR0PnBhcmFtX3R5cGU8L3R0PiB0eXBlZGVmLCB3aGljaCB1c2VzIHBhcnRpYWwKLSAgc3BlY2lhbGlzYXRpb24gdG8gbWFrZSBwcmVjaXNlbHkgdGhpcyBkZWNpc2lvbi4gSWYgd2Ugd2VyZSB0byBkZWNsYXJlCi0gIDx0dD5vcGVyYXRvcigpPC90dD4gYXM8L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLWJvb2wgb3BlcmF0b3IoKSh0eXBlbmFtZSBjYWxsX3RyYWl0cyZsdDt0eXBlbmFtZSBQcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmZ3Q7OjpwYXJhbV90eXBlIHgpIGNvbnN0Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPnRoZSBkZXNpcmVkIHJlc3VsdCB3b3VsZCBiZSBhY2hpZXZlZCAtIHdlIHdvdWxkIGVsaW1pbmF0ZSByZWZlcmVuY2VzIHRvCi0gIHJlZmVyZW5jZXMgd2l0aG91dCBsb3NzIG9mIGVmZmljaWVuY3kuIEluIGZhY3QsIHRoZSBhY3R1YWwgZGVjbGFyYXRpb24gaXMKLSAgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIG9mIHRoZSB1c2Ugb2YgZnVuY3Rpb24gb2JqZWN0IHRyYWl0cywgYnV0Ci0gIHRoZSBlZmZlY3QgcmVtYWlucyB0aGUgc2FtZS48L3A+Ci0KLSAgPGgzPkxpbWl0YXRpb25zPC9oMz4KLQotICA8cD5Cb3RoIHRoZSBmdW5jdGlvbiBvYmplY3QgdHJhaXRzIGFuZCBjYWxsIHRyYWl0cyB1c2VkIHRvIHJlYWxpc2UgdGhlc2UKLSAgaW1wcm92ZW1lbnRzIHJlbHkgb24gcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwgdGhlc2UgaW1wcm92ZW1lbnRzIGFyZSBvbmx5Ci0gIGF2YWlsYWJsZSBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IHRoYXQgZmVhdHVyZS4gV2l0aCBvdGhlciBjb21waWxlcnMsIHRoZQotICBuZWdhdG9ycyBpbiB0aGlzIGxpYnJhcnkgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIHRob3NlIGluIHRoZSBTdGFuZGFyZCAtCi0gIDx0dD5wdHJfZnVuPC90dD4gd2lsbCBiZSByZXF1aXJlZCB0byBhZGFwdCBmdW5jdGlvbnMsIGFuZCByZWZlcmVuY2VzIHRvCi0gIHJlZmVyZW5jZXMgd2lsbCBub3QgYmUgYXZvaWRlZC48L3A+Ci0gIDxocj4KLQotICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KLSAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKLSAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgotCi0gIDxwPlJldmlzZWQgCi0gIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKLSAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+Ci0KLSAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+Ci0KLSAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgotICBjb3B5IGF0IDxhIGhyZWY9Ci0gICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL0phbWZpbGUudjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YzEzZGQuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0KLSMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQotIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKLSMgKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBjb3B5IGF0Ci0jIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgotCi1pbXBvcnQgcXVpY2tib29rIDsKLXVzaW5nIGJvb3N0Ym9vayA7Ci0KLWRveHlnZW4gcmVmZXJlbmNlCi0gICAgOiAgIC4uLy4uLy4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAKLSAgICAgICAgLi4vLi4vLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAKLSAgICA6ICAgPHJlZnRpdGxlPiJSZWZlcmVuY2UiCi0gICAgICAgIDxkb3h5Z2VuOnBhcmFtPlBSRURFRklORUQ9IkRPWFlHRU4iCi0gICAgICAgIDxkb3h5Z2VuOnBhcmFtPlFVSUVUPVlFUwotICAgICAgICA8ZG94eWdlbjpwYXJhbT5XQVJOX0lGX1VORE9DVU1FTlRFRD1OTwotICAgICAgICA8ZG94eWdlbjpwYXJhbT5ISURFX1VORE9DX01FTUJFUlM9WUVTCi0gICAgICAgIDxkb3h5Z2VuOnBhcmFtPkhJREVfVU5ET0NfQ0xBU1NFUz1ZRVMKLSAgICAgICAgPGRveHlnZW46cGFyYW0+QUxJQVNFUz0iIFBhcmFtcz1cIjxiPlBhcmFtZXRlcnM6PC9iPiA8dGFibGUgYm9yZGVyPSIwIj5cIiBQYXJhbXsyfT1cIjx0cj48dGQ+PGI+PHR0PlxcMTwvdHQ+PC9iPjwvdGQ+PHRkPlxcMjwvdGQ+PC90cj5cIiBFbmRQYXJhbXM9XCI8L3RhYmxlPlwiIFJldHVybnM9XCI8Yj5SZXR1cm5zOjwvYj5cIiBOb3RlPVwiPGI+Tm90ZTo8L2I+XCIgV2FybmluZz1cIjxiPldhcm5pbmc6PC9iPlwiIFNlZT1cIjxiPlNlZTo8L2I+XCIgUmVmU2VjdHsyfT1cIlxceG1sb25seTxsaW5rIGxpbmtlbmQ9J2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLlxcMSc+XFwyPC9saW5rPlxcZW5keG1sb25seVwiIFJlZkNsYXNzezF9PVwiXFx4bWxvbmx5PGNvbXB1dGVyb3V0cHV0PjxjbGFzc25hbWUgYWx0PSdcXDEnPlxcMTwvY2xhc3NuYW1lPjwvY29tcHV0ZXJvdXRwdXQ+XFxlbmR4bWxvbmx5XCIgUmVmRnVuY3sxfT1cIlxceG1sb25seTxjb21wdXRlcm91dHB1dD48ZnVuY3Rpb25uYW1lIGFsdD0nXFwxJz5cXDE8L2Z1bmN0aW9ubmFtZT48L2NvbXB1dGVyb3V0cHV0PlxcZW5keG1sb25seVwiIFJlZk1hY3JvezF9PVwiXFx4bWxvbmx5PGNvbXB1dGVyb3V0cHV0PjxtYWNyb25hbWUgYWx0PSdcXDEnPlxcMTwvbWFjcm9uYW1lPjwvY29tcHV0ZXJvdXRwdXQ+XFxlbmR4bWxvbmx5XCIgIgotICAgIDsKLQoteG1sIHFiayA6IG92ZXJsb2FkZWRfZnVuY3Rpb24ucWJrIDogPGRlcGVuZGVuY3k+cmVmZXJlbmNlIDsKLQotYm9vc3Rib29rIGRvYyA6IHFiawotICAgIDogICA8eHNsOnBhcmFtPmJvb3N0LnJvb3Q9Li4vLi4vLi4vLi4vLi4KLSAgICAgICAgPHhzbDpwYXJhbT5ib29zdC5kZWZhdWx0cz1Cb29zdAotICAgICAgICA8Zm9ybWF0PnBkZjo8eHNsOnBhcmFtPmJvb3N0LnVybC5wcmVmaXg9aHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvcmVsZWFzZS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbAotICAgIDsKLQotaW5zdGFsbCBwZGZpbnN0YWxsIDogZG9jLzxmb3JtYXQ+cGRmIDogPGxvY2F0aW9uPi4gPGluc3RhbGwtdHlwZT5QREYgPG5hbWU+b3ZlcmxvYWRlZF9mdW5jdGlvbi5wZGYgOwotZXhwbGljaXQgcGRmaW5zdGFsbCA7CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhZjFhOC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5NYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvdGl0bGU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAmZ3Q7Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImJvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPk1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYPC9zcGFuPjwvaDI+Ci08cD5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCAmIzgyMTI7IFNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb25zIGJlaW5nIG92ZXJsb2FkZWQuIDwvcD4KLTwvZGl2PgotPGgyIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0icmVmc3lub3BzaXNkaXYtdGl0bGUiPlN5bm9wc2lzPC9oMj4KLTxkaXYgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+PHByZSBjbGFzcz0ic3lub3BzaXMiPjxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBJbiBoZWFkZXI6ICZsdDs8YSBjbGFzcz0ibGluayIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCZndDsiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwPC9hPiZndDsKLQotPC9zcGFuPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYPC9wcmU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZDgyMTU1NiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5JZiB0aGlzIG1hY3JvIGlzIGxlZnQgdW5kZWZpbmVkIGJ5IHRoZSB1c2VyLCBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlIG9mIDUgKGluY3JlYXNpbmcgdGhpcyBudW1iZXIgbWlnaHQgaW5jcmVhc2UgY29tcGlsYXRpb24gdGltZSkuIFdoZW4gc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGlzIG1hY3JvIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBudW1iZXIuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+U2VlOjwvc3Ryb25nPjwvc3Bhbj4gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbCIgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+IEdldHRpbmcgU3RhcnRlZDwvYT4sICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LiA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgotPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KLSAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCi0gICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCi0gICAgICA8L3A+Ci08L2Rpdj48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImJvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYmI1NTkuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Ci08dGl0bGU+TWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Ci08bGluayByZWw9InVwIiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sIiB0aXRsZT0iQWNrbm93bGVkZ21lbnRzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgotPGEgYWNjZXNza2V5PSJwIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5NYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvc3Bhbj48L2gyPgotPHA+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVggJiM4MjEyOyBTcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgb3ZlcmxvYWRlZC4gPC9wPgotPC9kaXY+Ci08aDIgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2Rpdi10aXRsZSI+U3lub3BzaXM8L2gyPgotPGRpdiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij48cHJlIGNsYXNzPSJzeW5vcHNpcyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEluIGhlYWRlcjogJmx0OzxhIGNsYXNzPSJsaW5rIiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OyI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHA8L2E+Jmd0OwotCi08L3NwYW4+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L3ByZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkODIxNjE0Ij48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPklmIHRoaXMgbWFjcm8gaXMgbGVmdCB1bmRlZmluZWQgYnkgdGhlIHVzZXIsIGl0IGhhcyBhIGRlZmF1bHQgdmFsdWUgb2YgNSAoaW5jcmVhc2luZyB0aGlzIG51bWJlciBtaWdodCBpbmNyZWFzZSBjb21waWxhdGlvbiB0aW1lKS4gV2hlbiBkZWZpbmVkIGJ5IHRoZSB1c2VyLCB0aGlzIG1hY3JvIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgZ3JlYXRlciBvciBlcXVhbCB0aGFuIDIgKGJlY2F1c2UgYXQgbGVhc3QgdHdvIGRpc3RpbmN0IGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byBkZWZpbmUgYW4gb3ZlcmxvYWQpLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlNlZTo8L3N0cm9uZz48L3NwYW4+ICA8YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPiBHZXR0aW5nIFN0YXJ0ZWQ8L2E+LCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4gPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KLTx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+Ci0gICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZwotICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQotICAgICAgPC9wPgotPC9kaXY+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgotPGEgYWNjZXNza2V5PSJwIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjVmMzkuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgotPHRpdGxlPkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvdGl0bGU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iYm9vc3QubWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5GdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PC9oMj4KLTxwPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24gJiM4MjEyOyBNYWtlIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHdpdGhvdXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiB0eXBlcy4gPC9wPgotPC9kaXY+Ci08aDIgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2Rpdi10aXRsZSI+U3lub3BzaXM8L2gyPgotPGRpdiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij48cHJlIGNsYXNzPSJzeW5vcHNpcyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEluIGhlYWRlcjogJmx0OzxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDsiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA8L2E+Jmd0OwotCi08L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiAKLSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5fX2Z1bmN0aW9uX3R5cGVfXzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl9fZnVuY3Rpb25fdHlwZV9fPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IAotICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gZjE8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiBmMjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPjwvcHJlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQ4MjEzNzYiPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBmdW5jdGlvbiB0ZW1wbGF0ZSBjcmVhdGVzIGFuZCByZXR1cm5zIGFuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPjwvY29kZT4gb2JqZWN0IHRoYXQgb3ZlcmxvYWRzIGFsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmYxPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mMjwvY29kZT4sIGV0Yy48L3A+Ci08cD5UaGUgZnVuY3Rpb24gdHlwZXMgYXJlIGludGVybmFsbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZXMgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IHNwZWNpZmllZC4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHRlbXBsYXRlIHVzdWFsbHkgaGFzIGEgbW9yZSBjb25jaXNlIHN5bnRheCB3aGVuIGNvbXBhcmVkIHdpdGggIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+PC9jb2RlPi4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHRoZSBleHBsaWNpdCB0eXBlIG9mIHRoZSByZXR1cm5lZCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT48L2NvZGU+IG9iamVjdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGtub3duIChlLmcuLCB3aGVuIHVzZWQgd2l0aCBCb29zdC5UeXBlb2YncyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJPT1NUX0FVVE88L2NvZGU+LCBDKysxMSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF1dG88L2NvZGU+LCBvciB3aGVuIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCBpcyBoYW5kbGVkIHVzaW5nIGEgZnVuY3Rpb24gdGVtcGxhdGUgcGFyYW1ldGVyLCBzZWUgdGhlICA8YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCIgdGl0bGU9IlR1dG9yaWFsIj4gVHV0b3JpYWw8L2E+IHNlY3Rpb24pLjwvcD4KLTxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gb3ZlcmxvYWQgaXMgZ2l2ZW4gYnkgdGhlICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9jb2RlPjwvY29kZT4gY29uZmlndXJhdGlvbiBtYWNyby48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPjwvc3Bhbj4gSW4gdGhpcyBkb2N1bWVudGF0aW9uLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9fZnVuY3Rpb25fdHlwZV9fPC9jb2RlPiBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIHN5bWJvbCB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+U2VlOjwvc3Ryb25nPjwvc3Bhbj4gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPiBUdXRvcmlhbDwvYT4gc2VjdGlvbiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+PC9jb2RlPiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvYT48L2NvZGU+PC9jb2RlPi4gPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KLTx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+Ci0gICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZwotICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQotICAgICAgPC9wPgotPC9kaXY+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgotPGEgYWNjZXNza2V5PSJwIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhjNjAwZi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5DbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uPC90aXRsZT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAmZ3Q7Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJSZWZlcmVuY2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08aHI+Ci08ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KLTxhIGFjY2Vzc2tleT0icCIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJib29zdC5vdmVybG9hZGVkX2Z1bmN0aW9uIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5DbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjwvaDI+Ci08cD5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbiAmIzgyMTI7IEZ1bmN0aW9uIG9iamVjdCB0byBvdmVybG9hZCBmdW5jdGlvbnMgd2l0aCBkaXN0aW5jdCBzaWduYXR1cmVzLiA8L3A+Ci08L2Rpdj4KLTxoMiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2LXRpdGxlIj5TeW5vcHNpczwvaDI+Ci08ZGl2IHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPjxwcmUgY2xhc3M9InN5bm9wc2lzIj48c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gSW4gaGVhZGVyOiAmbHQ7PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OyI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcDwvYT4mZ3Q7Ci0KLTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiAKLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotPHNwYW4gY2xhc3M9ImtleXdvcmQiPnB1YmxpYzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwjYm9vc3Qub3ZlcmxvYWRlZF9mdW5jdGlvbmNvbnN0cnVjdC1jb3B5LWRlc3RydWN0Ij5jb25zdHJ1Y3QvY29weS9kZXN0cnVjdDwvYT48L3NwYW4+Ci0gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwjaWQyNTkwOTAtYmIiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IAotICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCNpZDI1OTAyMC1iYiI+cHVibGljIG1lbWJlciBmdW5jdGlvbnM8L2E+PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gCi0gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwjaWQyNTkwMjMtYmIiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcxX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IAotICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMl90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiAKLSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCNpZDI1OTA0OS1iYiI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzFfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gCi0gICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcyX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPjwvcHJlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQ4MjA1OTAiPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBmdW5jdGlvbiBvYmplY3QgYWdncmVnYXRlcyB0b2dldGhlciBjYWxscyB0byBmdW5jdGlvbnMgb2YgYWxsIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GMTwvY29kZT4sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+RjI8L2NvZGU+LCBldGMgd2hpY2ggbXVzdCBoYXZlIGRpc3RpbmN0IGZ1bmN0aW9uIHNpZ25hdHVyZXMgZnJvbSBvbmUgYW5vdGhlci48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5QYXJhbWV0ZXJzOjwvc3Ryb25nPjwvc3Bhbj4gPC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJ0YWJsZSI+Ci08Y29sZ3JvdXA+Ci08Y29sPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+RjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmk8L2VtPjwvc3Bhbj48L2NvZGU+PC9zdHJvbmc+PC9zcGFuPjwvdGQ+Ci08dGQ+RWFjaCBmdW5jdGlvbiB0eXBlIG11c3QgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4ICh3aGljaCBpcyBCb29zdC5GdW5jdGlvbidzIHByZWZlcnJlZCBzeW50YXgpOiA8cHJlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0idGFibGUtcHJvZ3JhbWxpc3RpbmciPiAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmd1bWVudDFfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZ3VtZ25ldDJfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4KLTwvcHJlPiAgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08cD4KLTwvcD4KLTxwPkluIHNvbWUgY2FzZXMsIHRoZSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ibWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPm1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+IGZ1bmN0aW9uIHRlbXBsYXRlIGNhbiBiZSB1c2VmdWwgdG8gY29uc3RydWN0IGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHdpdGhvdXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiB0eXBlcy48L3A+Ci08cD5BdCBsZWFzdCB0d28gZGlzdGluY3QgZnVuY3Rpb24gdHlwZXMgbXVzdCBiZSBzcGVjaWZpZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90aGluZyB0byBvdmVybG9hZCBiZXR3ZWVuIG9uZSBvciB6ZXJvIGZ1bmN0aW9ucykuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gb3ZlcmxvYWQgaXMgZ2l2ZW4gYnkgdGhlICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC9hPjwvY29kZT4gY29uZmlndXJhdGlvbiBtYWNyby4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMgZm9yIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlcyBpcyBnaXZlbiBieSB0aGUgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L2E+PC9jb2RlPiBjb25maWd1cmF0aW9uIG1hY3JvLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlNlZTo8L3N0cm9uZz48L3NwYW4+ICA8YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCIgdGl0bGU9IlR1dG9yaWFsIj4gVHV0b3JpYWw8L2E+IHNlY3Rpb24sICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4sICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC9hPjwvY29kZT4sICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYPC9hPjwvY29kZT4sIEJvb3N0LkZ1bmN0aW9uLiA8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZDgyMDczOCI+PC9hPjxoMz4KLTxhIG5hbWU9ImJvb3N0Lm92ZXJsb2FkZWRfZnVuY3Rpb25jb25zdHJ1Y3QtY29weS1kZXN0cnVjdCI+PC9hPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvY29kZT4gCi0gICAgICAgIHB1YmxpYwotICAgICAgIGNvbnN0cnVjdC9jb3B5L2Rlc3RydWN0PC9oMz4KLTxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj48bGkgY2xhc3M9Imxpc3RpdGVtIj4KLTxwcmUgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxhIG5hbWU9ImlkMjU5MDkwLWJiIj48L2E+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm92ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiAKLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPjwvcHJlPkNvbnN0cnVjdCB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QuIDxwPkFueSBmdW5jdGlvbiBwb2ludGVyLCBmdW5jdGlvbiByZWZlcmVuY2UsIGFuZCBtb25vbW9ycGhpYyBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5ib29zdDo6ZnVuY3Rpb248L2NvZGU+IGZ1bmN0aW9uIG9iamVjdCBjYW4gYmUgc3BlY2lmaWVkIGFzIHBhcmFtZXRlci48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPjwvc3Bhbj4gVW5mb3J0dW5hdGVseSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHN1cHBvcnQgcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0cyAoYXMgZXhwbGFpbmVkIDxhIGhyZWY9Imh0dHA6Ly9saXN0cy5ib29zdC5vcmcvQXJjaGl2ZXMvYm9vc3QvMjAxMi8wMy8xOTE3NDQucGhwIiB0YXJnZXQ9Il90b3AiPmhlcmU8L2E+KS4gPC9wPgotPC9saT48L29sPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZDgyMDg3NCI+PC9hPjxoMz4KLTxhIG5hbWU9ImlkMjU5MDIwLWJiIj48L2E+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vdmVybG9hZGVkX2Z1bmN0aW9uPC9jb2RlPiBwdWJsaWMgbWVtYmVyIGZ1bmN0aW9uczwvaDM+Ci08ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLTxwcmUgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiAKLTxhIG5hbWU9ImlkMjU5MDIzLWJiIj48L2E+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMV90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiAKLSAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcyX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj48L3ByZT5DYWxsIG9wZXJhdG9yIG1hdGNoaW5nIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIHR5cGUgc3BlY2lmaWVkIGFzIDFzdCB0ZW1wbGF0ZSBwYXJhbWV0ZXIuIDxwPlRoaXMgd2lsbCBpbiB0dXJuIGludm9rZSB0aGUgY2FsbCBvcGVyYXRvciBvZiB0aGUgMXN0IGZ1bmN0aW9uIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuIDwvcD4KLTwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLTxwcmUgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiAKLTxhIG5hbWU9ImlkMjU5MDQ5LWJiIj48L2E+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMV90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiAKLSAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcyX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj48L3ByZT5DYWxsIG9wZXJhdG9yIG1hdGNoaW5nIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIHR5cGUgc3BlY2lmaWVkIGFzIDJuZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIuIDxwPlRoaXMgd2lsbCBpbiB0dXJuIGludm9rZSB0aGUgY2FsbCBvcGVyYXRvciBvZiB0aGUgMm5kIGZ1bmN0aW9uIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz48L3NwYW4+IFNpbWlsYXIgY2FsbCBvcGVyYXRvcnMgYXJlIHByZXNlbnQgZm9yIGFsbCBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GMTwvY29kZT4sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+RjI8L2NvZGU+LCBldGMgKGV2ZW4gaWYgbm90IGV4aGF1c3RpdmVseSBsaXN0ZWQgYnkgdGhpcyBkb2N1bWVudGF0aW9uKS4gPC9wPgotPC9saT4KLTwvb2w+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgYWxpZ249ImxlZnQiPjwvdGQ+Ci08dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgJiMxNjk7IDIwMTEsIDIwMTIgTG9yZW56byBDYW1pbml0aTxwPgotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHNlZSBhY2NvbXBhbnlpbmcKLSAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKLSAgICAgIDwvcD4KLTwvZGl2PjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08aHI+Ci08ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KLTxhIGFjY2Vzc2tleT0icCIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9hY2tub3dsZWRnbWVudHMuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDVkNDgxLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5BY2tub3dsZWRnbWVudHM8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Ci08bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX2Fja25vd2xlZGdtZW50cyI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uYWNrbm93bGVkZ21lbnRzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImFja25vd2xlZGdtZW50cy5odG1sIiB0aXRsZT0iQWNrbm93bGVkZ21lbnRzIj5BY2tub3dsZWRnbWVudHM8L2E+Ci08L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+Ci0gICAgICBNYW55IHRoYW5rcyB0byBNYXRoaWFzIEdhdW5hcmQgZm9yIHN1Z2dlc3RpbmcgdG8gaW1wbGVtZW50IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KLSAgICAgIGFuZCBmb3Igc29tZSBzYW1wbGUgY29kZS4KLSAgICA8L3A+Ci08cD4KLSAgICAgIFRoYW5rcyB0byBKb2huIEJ5dGhld2F5IGZvciBzdWdnZXN0aW5nIHRvIGltcGxlbWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgotICAgIDwvcD4KLTxwPgotICAgICAgVGhhbmtzIHRvIE5hdGhhbiBSaWRnZSBmb3Igc3VnZ2VzdGlvbnMgb24gaG93IHRvIGltcGxlbWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgotICAgIDwvcD4KLTxwPgotICAgICAgVGhhbmtzIHRvIFJvYmVydCBTdGV3YXJ0IGZvciBjb21tZW50aW5nIG9uIHRoZSBsaWJyYXJ5IG5hbWUuCi0gICAgPC9wPgotPHA+Ci0gICAgICBNYW55IHRoYW5rcyB0byB0aGUgZW50aXJlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnIiB0YXJnZXQ9Il90b3AiPkJvb3N0PC9hPiBjb21tdW5pdHkKLSAgICAgIGFuZCBtYWlsaW5nIGxpc3QgZm9yIHByb3ZpZGluZyB2YWx1YWJsZSBjb21tZW50cyBhYm91dCB0aGlzIGxpYnJhcnkgYW5kIGdyZWF0Ci0gICAgICBpbnNpZ2h0cyBvbiB0aGUgQysrIHByb2dyYW1taW5nIGxhbmd1YWdlLgotICAgIDwvcD4KLTwvZGl2PgotPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgotPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KLSAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCi0gICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCi0gICAgICA8L3A+Ci08L2Rpdj48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTllN2Q1Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Ci08bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ0dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0idHV0b3JpYWwuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9nZXR0aW5nX3N0YXJ0ZWQiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZCI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCIgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZwotICAgIFN0YXJ0ZWQ8L2E+Ci08L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5jb21waWxlcnNfYW5kX3BsYXRmb3JtcyI+Q29tcGlsZXJzCi0gICAgICBhbmQgUGxhdGZvcm1zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuaW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGl2PgotPHA+Ci0gICAgICBUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIHNldHVwIGEgc3lzdGVtIHRvIHVzZSB0aGlzIGxpYnJhcnkuCi0gICAgPC9wPgotPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9nZXR0aW5nX3N0YXJ0ZWRfY29tcGlsZXJzX2FuZF9wbGF0Zm9ybXMiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuY29tcGlsZXJzX2FuZF9wbGF0Zm9ybXMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmNvbXBpbGVyc19hbmRfcGxhdGZvcm1zIiB0aXRsZT0iQ29tcGlsZXJzIGFuZCBQbGF0Zm9ybXMiPkNvbXBpbGVycwotICAgICAgYW5kIFBsYXRmb3JtczwvYT4KLTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD4KLSAgICAgICAgVGhlIGF1dGhvcnMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYW5kIHRlc3RlZCB0aGlzIGxpYnJhcnkgb246Ci0gICAgICA8L3A+Ci08ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIEMrKyA0LjUuMyAod2l0aCBhbmQgd2l0aG91dCBDKysxMSBmZWF0dXJlcwotICAgICAgICAgICAgZW5hYmxlZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4tPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPisrPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PC9jb2RlPikKLSAgICAgICAgICAgIG9uIEN5Z3dpbi4KLSAgICAgICAgICA8L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICBNaXNjcm9zb2Z0IFZpc3VhbCBDKysgKE1TVkMpIDguMCBvbiBXaW5kb3dzIDcuCi0gICAgICAgICAgPC9saT4KLTwvb2w+PC9kaXY+Ci08cD4KLSAgICAgICAgU2VlIHRoZSBsaWJyYXJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RldmVsb3BtZW50L3Rlc3RzL3JlbGVhc2UvZGV2ZWxvcGVyL2Z1bmN0aW9uYWwtb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPnJlZ3Jlc3Npb25zCi0gICAgICAgIHRlc3QgcmVzdWx0czwvYT4gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBjb21waWxlcnMgYW5kCi0gICAgICAgIHBsYXRmb3Jtcy4gQ2hlY2sgdGhlIGxpYnJhcnkgcmVncmVzc2lvbiB0ZXN0IDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvSmFtZmlsZS52MiIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SmFtZmlsZS52MjwvY29kZT48L2E+Ci0gICAgICAgIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgY29tcGlsZXIuCi0gICAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24gYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb25fZ2V0dGluZ19zdGFydGVkX2luc3RhbGxhdGlvbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5pbnN0YWxsYXRpb24iPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmluc3RhbGxhdGlvbiIgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgotPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPgotICAgICAgICBUaGlzIGxpYnJhcnkgaXMgY29tcG9zZWQgb2YgaGVhZGVyIGZpbGVzIG9ubHkuIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBwcmUtY29tcGlsZWQKLSAgICAgICAgb2JqZWN0IGZpbGUgd2hpY2ggbmVlZHMgdG8gYmUgaW5zdGFsbGVkLiBQcm9ncmFtbWVycyBjYW4gc2ltcGx5IGluc3RydWN0Ci0gICAgICAgIHRoZSBjb21waWxlciB3aGVyZSB0byBmaW5kIHRoZSBsaWJyYXJ5IGhlYWRlciBmaWxlcyAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+STwvc3Bhbj48L2NvZGU+IG9wdGlvbiBvbiBHQ0MsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkk8L3NwYW4+PC9jb2RlPiBvcHRpb24gb24gTVNWQywgZXRjKSBhbmQgY29tcGlsZSBjb2RlCi0gICAgICAgIHVzaW5nIHRoZSBsaWJyYXJ5LgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gb3ZlcmxvYWQgaXMgZ2l2ZW4gYnkgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9jb2RlPgotICAgICAgICBjb25maWd1cmF0aW9uIG1hY3JvLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyBmb3IgZWFjaCBvZgotICAgICAgICB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGUgaXMgZ2l2ZW4gYnkgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L2E+PC9jb2RlPgotICAgICAgICBjb25maWd1cmF0aW9uIG1hY3JvLiBBbGwgY29uZmlndXJhdGlvbiBtYWNyb3MgaGF2ZSBhcHByb3ByaWF0ZSBkZWZhdWx0IHZhbHVlcwotICAgICAgICB3aGVuIHRoZXkgYXJlIGxlZnQgdW5kZWZpbmVkLgotICAgICAgPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KLTx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+Ci0gICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZwotICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQotICAgICAgPC9wPgotPC9kaXY+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgotPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InR1dG9yaWFsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQ5M2FjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5UdXRvcmlhbDwvdGl0bGU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJSZWZlcmVuY2UiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX3R1dG9yaWFsIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbCI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJ0dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPlR1dG9yaWFsPC9hPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ0dXRvcmlhbC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nIj5PdmVybG9hZGluZzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0idHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC53aXRob3V0X2Z1bmN0aW9uX3R5cGVzIj5XaXRob3V0Ci0gICAgICBGdW5jdGlvbiBUeXBlczwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kaXY+Ci08cD4KLSAgICAgIFRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gdXNlIHRoaXMgbGlicmFyeS4KLSAgICA8L3A+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX3R1dG9yaWFsX292ZXJsb2FkaW5nIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmciPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0idHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZyIgdGl0bGU9Ik92ZXJsb2FkaW5nIj5PdmVybG9hZGluZzwvYT4KLTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD4KLSAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkaXN0aW5jdCBzaWduYXR1cmVzOgotICAgICAgPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBGdW5jdGlvbiAoYXMgcG9pbnRlcikuPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2lfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEZ1bmN0aW9uIHJlZmVyZW5jZS48L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pJmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZF9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gRnVuY3Rvci48L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIFRoaXMgbGlicmFyeSBoZWFkZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAmZ3Q7Ij5ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwPC9hPjwvY29kZT4KLSAgICAgICAgcHJvdmlkZXMgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+Ci0gICAgICAgIGNsYXNzIHRlbXBsYXRlIHRoYXQgY3JlYXRlcyBhIHNpbmdsZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbgotICAgICAgICBiZSB1c2VkIHRvIGNhbGwgdGhlIHNwZWNpZmllZCBmdW5jdGlvbnMgaW5zdGVhZCBvZiB1c2luZyB0aGUgc2VwYXJhdGUgZnVuY3Rpb24KLSAgICAgICAgbmFtZXMgKHNlZSBhbHNvIDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvZnVuY3Rvci5jcHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZ1bmN0b3IuY3BwPC9jb2RlPjwvYT4KLSAgICAgICAgYW5kIDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZGVudGl0eS5ocHA8L2NvZGU+PC9hPik6Ci0gICAgICA8L3A+Ci08cD4KLTwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOyk8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gQWxsIGNhbGxzIHZpYSBzaW5nbGUgYGlkZW50aXR5YCBmdW5jdGlvbi48L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIE5vdGUgaG93IGVhY2ggZnVuY3Rpb24gdHlwZSBpcyBwYXNzZWQgYXMgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPiB1c2luZwotICAgICAgICB0aGUgZm9sbG93aW5nIHN5bnRheCAodGhpcyBpcyA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uIiB0YXJnZXQ9Il90b3AiPkJvb3N0LkZ1bmN0aW9uPC9hPidzCi0gICAgICAgIHByZWZlcnJlZCBzeW50YXgpOgotICAgICAgPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJlc3VsdC10eXBlPC9lbT48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50MS10eXBlPC9lbT48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50Mi10eXBlPC9lbT48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi4pPC9zcGFuPgotPC9wcmU+Ci08cD4KLSAgICAgICAgVGhlbiB0aGUgcmVsYXRpdmUgZnVuY3Rpb24gcG9pbnRlcnMsIGZ1bmN0aW9uIHJlZmVyZW5jZXMsIG9yIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG9seW1vcnBoaXNtXyhjb21wdXRlcl9zY2llbmNlKSIgdGFyZ2V0PSJfdG9wIj5tb25vbW9ycGhpYwotICAgICAgICBmdW5jdGlvbjwvYT4gb2JqZWN0cyBhcmUgcGFzc2VkIHRvIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+Ci0gICAgICAgIGNvbnN0cnVjdG9yIG1hdGNoaW5nIHRoZSBvcmRlciBvZiB0aGUgc3BlY2lmaWVkIHRlbXBsYXRlIHBhcmFtZXRlcnMuIDxzdXA+WzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYwIiBocmVmPSIjZnRuLmJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYwIiBjbGFzcz0iZm9vdG5vdGUiPjI8L2E+XTwvc3VwPiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48L2NvZGU+Ci0gICAgICAgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgKHRoZSBmdW5jdGlvbiBhZGRyZXNzIGlzIGF1dG9tYXRpY2FsbHkgdGFrZW4KLSAgICAgICAgZnJvbSB0aGUgZnVuY3Rpb24gbmFtZSBieSB0aGUgY29tcGlsZXIpLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjwvY29kZT4KLSAgICAgICAgYXMgYSBmdW5jdGlvbiByZWZlcmVuY2UsIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPjwvY29kZT4KLSAgICAgICAgYXMgYSBmdW5jdGlvbiBvYmplY3QuCi0gICAgICA8L3A+Ci08cD4KLSAgICAgICAgQWxsIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlcyBtdXN0IGhhdmUgZGlzdGluY3QgcGFyYW1ldGVycyBmcm9tIG9uZSBhbm90aGVyCi0gICAgICAgIChzbyB0aGUgb3ZlcmxvYWRlZCBjYWxscyBjYW4gYmUgcmVzb2x2ZWQgYnkgdGhpcyBsaWJyYXJ5KS4gPHN1cD5bPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjEiIGhyZWY9IiNmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjEiIGNsYXNzPSJmb290bm90ZSI+MzwvYT5dPC9zdXA+IEluIG9yZGVyIHRvIGNyZWF0ZSBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCwgaXQgaXMgbmVjZXNzYXJ5Ci0gICAgICAgIHRvIHNwZWNpZnkgYXQgbGVhc3QgdHdvIGZ1bmN0aW9uIHR5cGVzIChiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3ZlcmxvYWQKLSAgICAgICAgYmV0d2VlbiBvbmUgb3IgemVybyBmdW5jdGlvbnMpLgotICAgICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX3R1dG9yaWFsX3dpdGhvdXRfZnVuY3Rpb25fdHlwZXMiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC53aXRob3V0X2Z1bmN0aW9uX3R5cGVzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9InR1dG9yaWFsLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwud2l0aG91dF9mdW5jdGlvbl90eXBlcyIgdGl0bGU9IldpdGhvdXQgRnVuY3Rpb24gVHlwZXMiPldpdGhvdXQKLSAgICAgIEZ1bmN0aW9uIFR5cGVzPC9hPgotPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPgotICAgICAgICBGb3IgY29udmVuaWVuY2UsIHRoaXMgbGlicmFyeSBhbHNvIHByb3ZpZGVzIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+Ci0gICAgICAgIGZ1bmN0aW9uIHRlbXBsYXRlIHdoaWNoIGFsbG93cyB0byBjcmVhdGUgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHdpdGhvdXQKLSAgICAgICAgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiB0eXBlcy4gVGhlIGZ1bmN0aW9uIHR5cGVzIGFyZSBhdXRvbWF0aWNhbGx5Ci0gICAgICAgIGRlZHVjZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlIGFwcHJvcHJpYXRlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KLSAgICAgICAgaW5zdGFudGlhdGlvbiBpcyByZXR1cm5lZCBieSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIFRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+Ci0gICAgICAgIGZ1bmN0aW9uIHRlbXBsYXRlIGNhbiBiZSB1c2VmdWwgd2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4ncwotICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9BVVRPPC9zcGFuPjwvY29kZT4gKG9yIEMrKzExIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmF1dG88L3NwYW4+PC9jb2RlPikuIEZvciBleGFtcGxlIChzZWUgYWxzbyA8YSBocmVmPSIuLi8uLi8uLi90ZXN0L21ha2VfZGVjbC5jcHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm1ha2VfZGVjbC5jcHA8L2NvZGU+PC9hPgotICAgICAgICBhbmQgPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9pZGVudGl0eS5ocHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkZW50aXR5LmhwcDwvY29kZT48L2E+KToKLSAgICAgIDwvcD4KLTxwPgotPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9BVVRPPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYWJjIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4iYWJjIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KLTwvcHJlPgotPHA+Ci0gICAgICA8L3A+Ci08cD4KLSAgICAgICAgTm90ZSBob3cgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjwvY29kZT4KLSAgICAgICAgaGFzIGJlZW4gY3JlYXRlZCBzcGVjaWZ5aW5nIG9ubHkgdGhlIGZ1bmN0aW9ucyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjwvY29kZT4sCi0gICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48L2NvZGU+IGFuZCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uCi0gICAgICAgIHR5cGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOyk8L3NwYW4+PC9jb2RlPiwKLSAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4sIGFuZAotICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPiBhcwotICAgICAgICByZXF1aXJlZCBpbnN0ZWFkIGJ5IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4uCi0gICAgICAgIFRoZXJlZm9yZSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgotICAgICAgICBwcm92aWRlcyBhIG1vcmUgY29uY2lzZSBzeW50YXggaW4gdGhpcyBjb250ZXh0IHdoZW4gY29tcGFyZWQgd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIEFub3RoZXIgY2FzZSB3aGVyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+Ci0gICAgICAgIGNhbiBiZSB1c2VmdWwgaXMgd2hlbiB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgaXMgcGFzc2VkIHRvIGEgZnVuY3Rpb24KLSAgICAgICAgdGVtcGxhdGUgd2hpY2ggY2FuIGhvbGQgdGhlIHNwZWNpZmljIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KLSAgICAgICAgdHlwZSB1c2luZyBhIHRlbXBsYXRlIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUgKHNlZSBhbHNvIDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvbWFrZV9jYWxsLmNwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bWFrZV9jYWxsLmNwcDwvY29kZT48L2E+Ci0gICAgICAgIGFuZCA8YSBocmVmPSIuLi8uLi8uLi90ZXN0L2lkZW50aXR5LmhwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWRlbnRpdHkuaHBwPC9jb2RlPjwvYT4pOgotICAgICAgPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNoZWNrPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYWJjIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4iYWJjIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNoZWNrPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKTs8L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgPC9wPgotPHA+Ci0gICAgICAgIFRoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KLSAgICAgICAgdXNlcyA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPgotICAgICAgICB0byBhdXRvbWF0aWNhbGx5IGRlZHVjZSBzb21lIG9mIHRoZSBmdW5jdGlvbiB0eXBlcy4gSW4gb3JkZXIgdG8gY29tcGlsZSBjb2RlCi0gICAgICAgIGluIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+Ci0gICAgICAgIGVtdWxhdGlvbiBtb2RlLCBhbGwgdHlwZXMgc2hvdWxkIGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgdXNpbmcgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVFlQRU9GX1JFR0lTVEVSX1RZUEU8L3NwYW4+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVFlQRU9GX1JFR0lTVEVSX1RFTVBMQVRFPC9zcGFuPjwvY29kZT4sIG9yIGFwcHJvcHJpYXRlCi0gICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+IGhlYWRlcnMKLSAgICAgICAgc2hvdWxkIGJlIGluY2x1ZGVkIChzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4KLSAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLiBGb3IgdGhlIGFib3ZlIGV4YW1wbGVzLCBpdCBpcyBzdWZmaWNpZW50IHRvIGluY2x1ZGUKLSAgICAgICAgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+Ci0gICAgICAgIGhlYWRlciB0aGF0IHJlZ2lzdGVycyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PC9jb2RlPgotICAgICAgICAodGhpcyBsaWJyYXJ5IGRvZXMgbm90IHJlcXVpcmUgdG8gcmVnaXN0ZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48L2NvZGU+Ci0gICAgICAgIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPgotICAgICAgICBlbXVsYXRpb24pOgotICAgICAgPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InByZXByb2Nlc3NvciI+I2luY2x1ZGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dHlwZW9mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aHBwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gTm8gbmVlZCB0byByZWdpc3RlciBgYm9vc3Q6OmZ1bmN0aW9uYC48L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290bm90ZXMiPgotPGJyPjxociB3aWR0aD0iMTAwIiBhbGlnbj0ibGVmdCI+Ci08ZGl2IGNsYXNzPSJmb290bm90ZSI+PHA+PHN1cD5bPGEgaWQ9ImZ0bi5ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMCIgaHJlZj0iI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYwIiBjbGFzcz0icGFyYSI+MjwvYT5dIDwvc3VwPgotICAgICAgICAgIEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBvZiB0aGUgZm9ybSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmVzdWx0LXR5cGUgPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigqKSg8L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudDEtdHlwZTwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uKTwvc3Bhbj48L2NvZGU+ICh0aGUKLSAgICAgICAgICBDKysgY29tcGlsZXIgaXMgdXN1YWxseSBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgcHJvbW90ZSBhIGZ1bmN0aW9uIG5hbWUgdG8KLSAgICAgICAgICBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBjb250ZXh0IHdoZXJlIGEgZnVuY3Rpb24gcG9pbnRlciBpcyBleHBlY3RlZCBldmVuCi0gICAgICAgICAgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IHByZWZpeGVkIGJ5IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPjwvY29kZT4pLgotICAgICAgICAgIEZ1bmN0aW9uIHJlZmVyZW5jZXMgYXJlIG9mIHRoZSBmb3JtIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZXN1bHQtdHlwZSA8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCZhbXA7KSg8L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudDEtdHlwZTwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uKTwvc3Bhbj48L2NvZGU+LgotICAgICAgICAgIEZ1bmN0aW9uIHR5cGVzIGFyZSBvZiB0aGUgZm9ybSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmVzdWx0LXR5cGUgPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudDEtdHlwZTwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uKTwvc3Bhbj48L2NvZGU+IChub3RlCi0gICAgICAgICAgaG93IHRoZXkgbGFjayBvZiBib3RoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPio8L3NwYW4+PC9jb2RlPiBhbmQKLSAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj48L2NvZGU+IHdoZW4gY29tcGFyZWQgdG8gZnVuY3Rpb24KLSAgICAgICAgICBwb2ludGVycyBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcykuIEZpbmFsbHksIG1vbm9tb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMKLSAgICAgICAgICBhcmUgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBhIG5vbi10ZW1wbGF0ZSBjYWxsIG9wZXJhdG9yIG9mIHRoZSBmb3JtCi0gICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJlc3VsdC10eXBlIDwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCkoPC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJndW1lbnQxLXR5cGU8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLik8L3NwYW4+PC9jb2RlPi4KLSAgICAgICAgICBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QgcG9zc2libGUgdG8gc3VwcG9ydCBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3RzCi0gICAgICAgICAgKHNlZSA8YSBocmVmPSJodHRwOi8vbGlzdHMuYm9vc3Qub3JnL0FyY2hpdmVzL2Jvb3N0LzIwMTIvMDMvMTkxNzQ0LnBocCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vbGlzdHMuYm9vc3Qub3JnL0FyY2hpdmVzL2Jvb3N0LzIwMTIvMDMvMTkxNzQ0LnBocDwvYT4pLgotICAgICAgICA8L3A+PC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290bm90ZSI+PHA+PHN1cD5bPGEgaWQ9ImZ0bi5ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMSIgaHJlZj0iI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYxIiBjbGFzcz0icGFyYSI+MzwvYT5dIDwvc3VwPgotICAgICAgICAgIE5vdGUgdGhhdCBpbiBDKysgdGhlIGZ1bmN0aW9uIHJlc3VsdCB0eXBlIGlzIG5vdCB1c2VkIGZvciBvdmVybG9hZCByZXNvbHV0aW9uCi0gICAgICAgICAgKHRvIGF2b2lkIG1ha2luZyB0aGUgb3ZlcmxvYWQgcmVzb2x1dGlvbiBjb250ZXh0IGRlcGVuZGVudCkuIFRoZXJlZm9yZSwKLSAgICAgICAgICBhdCBsZWFzdCBvbmUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgbXVzdCBiZSBkaXN0aW5jdCBmb3IgZWFjaCBzcGVjaWZpZWQKLSAgICAgICAgICBmdW5jdGlvbiB0eXBlLgotICAgICAgICA8L3A+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgotPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KLSAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCi0gICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCi0gICAgICA8L3A+Ci08L2Rpdj48L3RkPgotPC90cj48L3RhYmxlPgotPGhyPgotPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Ci08YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2YzBlOS4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Ci08dGl0bGU+Q2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjA8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC9kaXY+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj4KLTxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbiI+PC9hPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wPC9oMj48L2Rpdj4KLTxkaXY+PGRpdiBjbGFzcz0iYXV0aG9yIj48aDMgY2xhc3M9ImF1dGhvciI+Ci08c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Mb3JlbnpvPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+Q2FtaW5pdGkgPGNvZGUgY2xhc3M9ImVtYWlsIj4mbHQ7PGEgY2xhc3M9ImVtYWlsIiBocmVmPSJtYWlsdG86bG9yY2FtaW5pdGlAZ21haWwuY29tIj5sb3JjYW1pbml0aUBnbWFpbC5jb208L2E+Jmd0OzwvY29kZT48L3NwYW4+Ci08L2gzPjwvZGl2PjwvZGl2PgotPGRpdj48cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgJiMxNjk7IDIwMTEsIDIwMTIgTG9yZW56byBDYW1pbml0aTwvcD48L2Rpdj4KLTxkaXY+PGRpdiBjbGFzcz0ibGVnYWxub3RpY2UiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24ubGVnYWwiPjwvYT48cD4KLSAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCi0gICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCi0gICAgICA8L3A+Ci08L2Rpdj48L2Rpdj4KLTwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj4KLTxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KLTxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5pbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiPkdldHRpbmcKLSAgICBTdGFydGVkPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmNvbXBpbGVyc19hbmRfcGxhdGZvcm1zIj5Db21waWxlcnMKLSAgICAgIGFuZCBQbGF0Zm9ybXM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5pbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCI+VHV0b3JpYWw8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nIj5PdmVybG9hZGluZzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC53aXRob3V0X2Z1bmN0aW9uX3R5cGVzIj5XaXRob3V0Ci0gICAgICBGdW5jdGlvbiBUeXBlczwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icmVmZXJlbmNlLmh0bWwiPlJlZmVyZW5jZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj5IZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAmZ3Q7PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiPkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAmZ3Q7PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9hY2tub3dsZWRnbWVudHMuaHRtbCI+QWNrbm93bGVkZ21lbnRzPC9hPjwvc3Bhbj48L2R0PgotPC9kbD4KLTwvZGl2PgotPHA+Ci0gICAgVGhpcyBsaWJyYXJ5IGFsbG93cyB0byBvdmVybG9hZCBkaWZmZXJlbnQgZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgZnVuY3Rpb24gb2JqZWN0LgotICA8L3A+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX2ludHJvZHVjdGlvbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uIiB0aXRsZT0iSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+Ci08L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+Ci0gICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGRpc3RpbmN0IHNpZ25hdHVyZXM6Ci0gICAgPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBGdW5jdGlvbiAoYXMgcG9pbnRlcikuPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2lfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEZ1bmN0aW9uIHJlZmVyZW5jZS48L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pJmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZF9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gRnVuY3Rvci48L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgIDwvcD4KLTxwPgotICAgICAgSW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0gdXNpbmcgdGhlaXIgc2VwYXJhdGUgbmFtZXMgKGhlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48L2NvZGU+Ci0gICAgICBpcyBlcXVpdmFsZW50IHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFzc2VydDwvc3Bhbj48L2NvZGU+KToKLSAgICAgIDxzdXA+WzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmludHJvZHVjdGlvbi5mMCIgaHJlZj0iI2Z0bi5ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5pbnRyb2R1Y3Rpb24uZjAiIGNsYXNzPSJmb290bm90ZSI+MTwvYT5dPC9zdXA+Ci0gICAgPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPC9wcmU+Ci08cD4KLSAgICA8L3A+Ci08cD4KLSAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGxpYnJhcnkgdG8gY3JlYXRlIGEgc2luZ2xlIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3Rpb25fb3ZlcmxvYWRpbmciIHRhcmdldD0iX3RvcCI+b3ZlcmxvYWRlZDwvYT4KLSAgICAgIGZ1bmN0aW9uIG9iamVjdCAob3IgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdW5jdG9yIiB0YXJnZXQ9Il90b3AiPmZ1bmN0b3I8L2E+KQotICAgICAgbmFtZWQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PC9jb2RlPiB0aGF0IGFnZ3JlZ2F0ZXMKLSAgICAgIHRvZ2V0aGVyIHRoZSBjYWxscyB0byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIChzZWUgYWxzbyA8YSBocmVmPSIuLi8uLi90ZXN0L2Z1bmN0b3IuY3BwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5mdW5jdG9yLmNwcDwvY29kZT48L2E+Ci0gICAgICBhbmQgPGEgaHJlZj0iLi4vLi4vdGVzdC9pZGVudGl0eS5ocHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkZW50aXR5LmhwcDwvY29kZT48L2E+KToKLSAgICA8L3A+Ci08cD4KLTwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOyk8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gQWxsIGNhbGxzIHZpYSBzaW5nbGUgYGlkZW50aXR5YCBmdW5jdGlvbi48L3NwYW4+Ci08c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Ci08L3ByZT4KLTxwPgotICAgIDwvcD4KLTxwPgotICAgICAgTm90ZSBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHZpYSBhIHNpbmdsZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdAotICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PC9jb2RlPiBpbnN0ZWFkIG9mIHVzaW5nIHRoZWlyCi0gICAgICBkaWZmZXJlbnQgbmFtZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48L2NvZGU+LAotICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48L2NvZGU+LCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48L2NvZGU+LgotICAgIDwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdG5vdGVzIj4KLTxicj48aHIgd2lkdGg9IjEwMCIgYWxpZ249ImxlZnQiPgotPGRpdiBjbGFzcz0iZm9vdG5vdGUiPjxwPjxzdXA+WzxhIGlkPSJmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uLmYwIiBocmVmPSIjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uLmYwIiBjbGFzcz0icGFyYSI+MTwvYT5dIDwvc3VwPgotICAgICAgICBJbiBtb3N0IG9mIHRoZSBleGFtcGxlcyBwcmVzZW50ZWQgaW4gdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgQm9vc3QuRGV0YWlsL0xpZ2h0d2VpZ2h0VGVzdAotICAgICAgICAoPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcDwvY29kZT4pIG1hY3JvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PC9jb2RlPiBpcyB1c2VkIHRvIGNoZWNrIGNvcnJlY3RuZXNzCi0gICAgICAgIGNvbmRpdGlvbnMgKGNvbmNlcHR1YWxseSBzaW1pbGFyIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFzc2VydDwvc3Bhbj48L2NvZGU+KS4KLSAgICAgICAgQSBmYWlsdXJlIG9mIHRoZSBjaGVja2VkIGNvbmRpdGlvbiBkb2VzIG5vdCBhYm9ydCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLAotICAgICAgICBpdCB3aWxsIGluc3RlYWQgbWFrZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlcG9ydF9lcnJvcnM8L3NwYW4+PC9jb2RlPgotICAgICAgICByZXR1cm4gYSBub24temVybyBwcm9ncmFtIGV4aXQgY29kZS4gVXNpbmcgQm9vc3QuRGV0YWlsL0xpZ2h0d2VpZ2h0VGVzdCBhbGxvd3MKLSAgICAgICAgdG8gYWRkIHRoZSBleGFtcGxlcyB0byB0aGUgbGlicmFyeSByZWdyZXNzaW9uIHRlc3RzIHNvIHRvIG1ha2Ugc3VyZSB0aGF0Ci0gICAgICAgIHRoZXkgYWx3YXlzIGNvbXBpbGUgYW5kIHJ1biBjb3JyZWN0bHkuCi0gICAgICA8L3A+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48cD48c21hbGw+TGFzdCByZXZpc2VkOiBBcHJpbCAyOCwgMjAxMiBhdCAwMjoxOToxMyBHTVQ8L3NtYWxsPjwvcD48L3RkPgotPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+PC9kaXY+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9yZWZlcmVuY2UuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL3JlZmVyZW5jZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWE4OWYwLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL3JlZmVyZW5jZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTx0aXRsZT5SZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgotPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KLTx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Ci08dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgotPGEgYWNjZXNza2V5PSJwIiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiByZWZlcmVuY2UiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InJlZmVyZW5jZSI+PC9hPlJlZmVyZW5jZTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiPkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDs8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+SGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCZndDs8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiBoZWFkZXJfYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImhlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48L2E+SGVhZGVyICZsdDs8YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwIiB0YXJnZXQ9Il90b3AiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA8L2E+Jmd0OzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5PdmVybG9hZCBkaXN0aW5jdCBmdW5jdGlvbiBwb2ludGVycywgZnVuY3Rpb24gcmVmZXJlbmNlcywgYW5kIG1vbm9tb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMgaW50byBhIHNpbmdsZSBmdW5jdGlvbiBvYmplY3QuIDwvcD4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiAKLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl9fZnVuY3Rpb25fdHlwZV9fPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+X19mdW5jdGlvbl90eXBlX188L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gCi0gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPjwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIGhlYWRlcl9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRfZnVuY3Rpb25fY29uZmlnX2hwcCI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImhlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+PC9hPkhlYWRlciAmbHQ7PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAiIHRhcmdldD0iX3RvcCI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHA8L2E+Jmd0OzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5DaGFuZ2UgdGhlIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgbGlicmFyeS4gPC9wPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPgotCi08YSBjbGFzcz0ibGluayIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvYT4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC9hPjwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KLTx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+Ci0gICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZwotICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQotICAgICAgPC9wPgotPC9kaXY+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxocj4KLTxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgotPGEgYWNjZXNza2V5PSJwIiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL292ZXJsb2FkZWRfZnVuY3Rpb24ucWJrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL292ZXJsb2FkZWRfZnVuY3Rpb24ucWJrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2Y2OTY0Li4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9vdmVybG9hZGVkX2Z1bmN0aW9uLnFiaworKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0KLVsvIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIExvcmVuem8gQ2FtaW5pdGkgXQotWy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIF0KLVsvIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdCBdCi1bLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KLVsvIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24gXQotCi1bbGlicmFyeSBCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbgotICAgIFtxdWlja2Jvb2sgMS41XQotICAgIFt2ZXJzaW9uIDEuMC4wXQotICAgIFtjb3B5cmlnaHQgMjAxMS0yMDEyIExvcmVuem8gQ2FtaW5pdGldCi0gICAgW3B1cnBvc2Ugb3ZlcmxvYWQgZnVuY3Rpb25zIHdpdGggb25lIGZ1bmN0aW9uIG9iamVjdF0KLSAgICBbbGljZW5zZQotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKLSAgICAgICAgKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICAgICAgICBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dF0pCi0gICAgXQotICAgIFthdXRob3JzIFtDYW1pbml0aSA8ZW1haWw+bG9yY2FtaW5pdGlAZ21haWwuY29tPC9lbWFpbD4sIExvcmVuem9dXQotICAgIFtjYXRlZ29yeSBGdW5jdGlvbiBPYmplY3RzIGFuZCBIaWdoZXItT3JkZXIgUHJvZ3JhbW1pbmddCi1dCi0KLVtkZWYgX19JbnRyb2R1Y3Rpb25fXyBbbGluayBmdW5jdGlvbmFsX292ZXJsb2FkZWRfZnVuY3Rpb24uaW50cm9kdWN0aW9uIEludHJvZHVjdGlvbl1dCi1bZGVmIF9fR2V0dGluZ19TdGFydGVkX18gW2xpbmsgZnVuY3Rpb25hbF9vdmVybG9hZGVkX2Z1bmN0aW9uLmdldHRpbmdfc3RhcnRlZCBHZXR0aW5nIFN0YXJ0ZWRdXQotW2RlZiBfX1R1dG9yaWFsX18gW2xpbmsgZnVuY3Rpb25hbF9vdmVybG9hZGVkX2Z1bmN0aW9uLnR1dG9yaWFsIFR1dG9yaWFsXV0KLVtkZWYgX19Cb29zdF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcgQm9vc3RdXQotW2RlZiBfX0Jvb3N0X1Rlc3RfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBCb29zdC5UZXN0XV0KLVtkZWYgX19Cb29zdF9GdW5jdGlvbl9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbiBCb29zdC5GdW5jdGlvbl1dCi1bZGVmIF9fQm9vc3RfVHlwZW9mX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YgQm9vc3QuVHlwZW9mXV0KLQotW2ltcG9ydCAuLi90ZXN0L2lkZW50aXR5LmhwcF0KLVtpbXBvcnQgLi4vdGVzdC9mdW5jdG9yLmNwcF0KLVtpbXBvcnQgLi4vdGVzdC9tYWtlX2RlY2wuY3BwXQotW2ltcG9ydCAuLi90ZXN0L21ha2VfY2FsbC5jcHBdCi0KLVRoaXMgbGlicmFyeSBhbGxvd3MgdG8gb3ZlcmxvYWQgZGlmZmVyZW50IGZ1bmN0aW9ucyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIG9iamVjdC4KLQotW3NlY3Rpb24gSW50cm9kdWN0aW9uXQotCi1Db25zaWRlciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGRpc3RpbmN0IHNpZ25hdHVyZXM6Ci0KLVtpZGVudGl0eV9kZWNsc10KLQotSW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0gdXNpbmcgdGhlaXIgc2VwYXJhdGUgbmFtZXMgKGhlcmUgYEJPT1NUX1RFU1RgIGlzIGVxdWl2YWxlbnQgdG8gYGFzc2VydGApOgotW2Zvb3Rub3RlCi1JbiBtb3N0IG9mIHRoZSBleGFtcGxlcyBwcmVzZW50ZWQgaW4gdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgQm9vc3QuRGV0YWlsL0xpZ2h0d2VpZ2h0VGVzdCAoPWJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD0pIG1hY3JvIGBCT09TVF9URVNUYCBpcyB1c2VkIHRvIGNoZWNrIGNvcnJlY3RuZXNzIGNvbmRpdGlvbnMgKGNvbmNlcHR1YWxseSBzaW1pbGFyIHRvIGBhc3NlcnRgKS4KLUEgZmFpbHVyZSBvZiB0aGUgY2hlY2tlZCBjb25kaXRpb24gZG9lcyBub3QgYWJvcnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgaXQgd2lsbCBpbnN0ZWFkIG1ha2UgYGJvb3N0OjpyZXBvcnRfZXJyb3JzYCByZXR1cm4gYSBub24temVybyBwcm9ncmFtIGV4aXQgY29kZS4KLVVzaW5nIEJvb3N0LkRldGFpbC9MaWdodHdlaWdodFRlc3QgYWxsb3dzIHRvIGFkZCB0aGUgZXhhbXBsZXMgdG8gdGhlIGxpYnJhcnkgcmVncmVzc2lvbiB0ZXN0cyBzbyB0byBtYWtlIHN1cmUgdGhhdCB0aGV5IGFsd2F5cyBjb21waWxlIGFuZCBydW4gY29ycmVjdGx5LgotXQotCi1baWRlbnRpdHlfY2FsbHNdCi0KLUl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGxpYnJhcnkgdG8gY3JlYXRlIGEgc2luZ2xlIFtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdW5jdGlvbl9vdmVybG9hZGluZyBvdmVybG9hZGVkXSBmdW5jdGlvbiBvYmplY3QgKG9yIFtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdW5jdG9yIGZ1bmN0b3JdKSBuYW1lZCBgaWRlbnRpdHlgIHRoYXQgYWdncmVnYXRlcyB0b2dldGhlciB0aGUgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyAoc2VlIGFsc28gW0AuLi8uLi90ZXN0L2Z1bmN0b3IuY3BwID1mdW5jdG9yLmNwcD1dIGFuZCBbQC4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwID1pZGVudGl0eS5ocHA9XSk6Ci0KLVtpZGVudGl0eV9mdW5jdG9yXQotCi1Ob3RlIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdmlhIGEgc2luZ2xlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IGBpZGVudGl0eWAgaW5zdGVhZCBvZiB1c2luZyB0aGVpciBkaWZmZXJlbnQgbmFtZXMgYGlkZW50aXR5X3NgLCBgaWRlbnRpdHlfaWAsIGFuZCBgaWRlbnRpdHlfZGAuCi0KLVtlbmRzZWN0XQotCi1bc2VjdGlvbiBHZXR0aW5nIFN0YXJ0ZWRdCi0KLVRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gc2V0dXAgYSBzeXN0ZW0gdG8gdXNlIHRoaXMgbGlicmFyeS4KLQotW3NlY3Rpb24gQ29tcGlsZXJzIGFuZCBQbGF0Zm9ybXNdCi0KLVRoZSBhdXRob3JzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGFuZCB0ZXN0ZWQgdGhpcyBsaWJyYXJ5IG9uOgotCi0jIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIEMrKyA0LjUuMyAod2l0aCBhbmQgd2l0aG91dCBDKysxMSBmZWF0dXJlcyBlbmFibGVkIGAtc3RkPWMrKzB4YCkgb24gQ3lnd2luLgotIyBNaXNjcm9zb2Z0IFZpc3VhbCBDKysgKE1TVkMpIDguMCBvbiBXaW5kb3dzIDcuCi0KLVNlZSB0aGUgbGlicmFyeSBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RldmVsb3BtZW50L3Rlc3RzL3JlbGVhc2UvZGV2ZWxvcGVyL2Z1bmN0aW9uYWwtb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIHJlZ3Jlc3Npb25zIHRlc3QgcmVzdWx0c10gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBjb21waWxlcnMgYW5kIHBsYXRmb3Jtcy4KLUNoZWNrIHRoZSBsaWJyYXJ5IHJlZ3Jlc3Npb24gdGVzdCBbQC4uLy4uL3Rlc3QvSmFtZmlsZS52MiA9SmFtZmlsZS52Mj1dIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgY29tcGlsZXIuCi0KLVtlbmRzZWN0XQotCi1bc2VjdGlvbiBJbnN0YWxsYXRpb25dCi0KLVRoaXMgbGlicmFyeSBpcyBjb21wb3NlZCBvZiBoZWFkZXIgZmlsZXMgb25seS4KLVRoZXJlZm9yZSB0aGVyZSBpcyBubyBwcmUtY29tcGlsZWQgb2JqZWN0IGZpbGUgd2hpY2ggbmVlZHMgdG8gYmUgaW5zdGFsbGVkLgotUHJvZ3JhbW1lcnMgY2FuIHNpbXBseSBpbnN0cnVjdCB0aGUgY29tcGlsZXIgd2hlcmUgdG8gZmluZCB0aGUgbGlicmFyeSBoZWFkZXIgZmlsZXMgKGAtSWAgb3B0aW9uIG9uIEdDQywgYC9JYCBvcHRpb24gb24gTVNWQywgZXRjKSBhbmQgY29tcGlsZSBjb2RlIHVzaW5nIHRoZSBsaWJyYXJ5LgotCi1UaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb25zIHRvIG92ZXJsb2FkIGlzIGdpdmVuIGJ5IHRoZSBbbWFjcm9yZWYgQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVhdIGNvbmZpZ3VyYXRpb24gbWFjcm8uCi1UaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyBmb3IgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGUgaXMgZ2l2ZW4gYnkgdGhlIFttYWNyb3JlZiBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWF0gY29uZmlndXJhdGlvbiBtYWNyby4KLUFsbCBjb25maWd1cmF0aW9uIG1hY3JvcyBoYXZlIGFwcHJvcHJpYXRlIGRlZmF1bHQgdmFsdWVzIHdoZW4gdGhleSBhcmUgbGVmdCB1bmRlZmluZWQuCi0KLVtlbmRzZWN0XQotCi1bZW5kc2VjdF0KLQotW3NlY3Rpb24gVHV0b3JpYWxdCi0KLVRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gdXNlIHRoaXMgbGlicmFyeS4KLQotW3NlY3Rpb24gT3ZlcmxvYWRpbmddCi0KLUNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdoaWNoIGhhdmUgZGlzdGluY3Qgc2lnbmF0dXJlczoKLQotW2lkZW50aXR5X2RlY2xzXQotCi1UaGlzIGxpYnJhcnkgaGVhZGVyIFtoZWFkZXJyZWYgYm9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcF0gcHJvdmlkZXMgYSBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dIGNsYXNzIHRlbXBsYXRlIHRoYXQgY3JlYXRlcyBhIHNpbmdsZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbGwgdGhlIHNwZWNpZmllZCBmdW5jdGlvbnMgaW5zdGVhZCBvZiB1c2luZyB0aGUgc2VwYXJhdGUgZnVuY3Rpb24gbmFtZXMgKHNlZSBhbHNvIFtALi4vLi4vdGVzdC9mdW5jdG9yLmNwcCA9ZnVuY3Rvci5jcHA9XSBhbmQgW0AuLi8uLi90ZXN0L2lkZW50aXR5LmhwcCA9aWRlbnRpdHkuaHBwPV0pOgotCi1baWRlbnRpdHlfZnVuY3Rvcl0KLQotTm90ZSBob3cgZWFjaCBmdW5jdGlvbiB0eXBlIGlzIHBhc3NlZCBhcyBhIHRlbXBsYXRlIHBhcmFtZXRlciBvZiBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dIHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4ICh0aGlzIGlzIF9fQm9vc3RfRnVuY3Rpb25fXydzIHByZWZlcnJlZCBzeW50YXgpOgotCi0gICAgYGAvcmVzdWx0LXR5cGUvYGAgKGBgL2FyZ3VtZW50MS10eXBlL2BgLCBgYC9hcmd1bWVudDItdHlwZS9gYCwgLi4uKQotCi1UaGVuIHRoZSByZWxhdGl2ZSBmdW5jdGlvbiBwb2ludGVycywgZnVuY3Rpb24gcmVmZXJlbmNlcywgb3IgW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BvbHltb3JwaGlzbV8oY29tcHV0ZXJfc2NpZW5jZSkgbW9ub21vcnBoaWMgZnVuY3Rpb25dIG9iamVjdHMgYXJlIHBhc3NlZCB0byB0aGUgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXSBjb25zdHJ1Y3RvciBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHNwZWNpZmllZCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgotW2Zvb3Rub3RlCi1GdW5jdGlvbiBwb2ludGVycyBhcmUgb2YgdGhlIGZvcm0gW15bJ3Jlc3VsdC10eXBlIF1dYCgqKShgW15bJ2FyZ3VtZW50MS10eXBlXV1gLCAuLi4pYCAodGhlIEMrKyBjb21waWxlciBpcyB1c3VhbGx5IGFibGUgdG8gYXV0b21hdGljYWxseSBwcm9tb3RlIGEgZnVuY3Rpb24gbmFtZSB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBjb250ZXh0IHdoZXJlIGEgZnVuY3Rpb24gcG9pbnRlciBpcyBleHBlY3RlZCBldmVuIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGlzIG5vdCBwcmVmaXhlZCBieSBgJmApLgotRnVuY3Rpb24gcmVmZXJlbmNlcyBhcmUgb2YgdGhlIGZvcm0gW15bJ3Jlc3VsdC10eXBlIF1dYCgmKShgW15bJ2FyZ3VtZW50MS10eXBlXV1gLCAuLi4pYC4KLUZ1bmN0aW9uIHR5cGVzIGFyZSBvZiB0aGUgZm9ybSBbXlsncmVzdWx0LXR5cGUgXV1gKGBbXlsnYXJndW1lbnQxLXR5cGVdXWAsIC4uLilgIChub3RlIGhvdyB0aGV5IGxhY2sgb2YgYm90aCBgKmAgYW5kIGAmYCB3aGVuIGNvbXBhcmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBmdW5jdGlvbiByZWZlcmVuY2VzKS4KLUZpbmFsbHksIG1vbm9tb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMgYXJlIGluc3RhbmNlcyBvZiBjbGFzc2VzIHdpdGggYSBub24tdGVtcGxhdGUgY2FsbCBvcGVyYXRvciBvZiB0aGUgZm9ybSBbXlsncmVzdWx0LXR5cGUgXV1gb3BlcmF0b3IoKShgW15bJ2FyZ3VtZW50MS10eXBlXV1gLCAuLi4pYC4KLVVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdXBwb3J0IHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMgKHNlZSBbQGh0dHA6Ly9saXN0cy5ib29zdC5vcmcvQXJjaGl2ZXMvYm9vc3QvMjAxMi8wMy8xOTE3NDQucGhwXSkuCi1dCi1JbiB0aGUgYWJvdmUgZXhhbXBsZSwgYGlkZW50aXR5X3NgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgKHRoZSBmdW5jdGlvbiBhZGRyZXNzIGlzIGF1dG9tYXRpY2FsbHkgdGFrZW4gZnJvbSB0aGUgZnVuY3Rpb24gbmFtZSBieSB0aGUgY29tcGlsZXIpLCBgaWRlbnRpdHlfaWAgYXMgYSBmdW5jdGlvbiByZWZlcmVuY2UsIGFuZCBgaWRlbnRpdHlfZGAgYXMgYSBmdW5jdGlvbiBvYmplY3QuCi0KLUFsbCBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZXMgbXVzdCBoYXZlIGRpc3RpbmN0IHBhcmFtZXRlcnMgZnJvbSBvbmUgYW5vdGhlciAoc28gdGhlIG92ZXJsb2FkZWQgY2FsbHMgY2FuIGJlIHJlc29sdmVkIGJ5IHRoaXMgbGlicmFyeSkuCi1bZm9vdG5vdGUKLU5vdGUgdGhhdCBpbiBDKysgdGhlIGZ1bmN0aW9uIHJlc3VsdCB0eXBlIGlzIG5vdCB1c2VkIGZvciBvdmVybG9hZCByZXNvbHV0aW9uICh0byBhdm9pZCBtYWtpbmcgdGhlIG92ZXJsb2FkIHJlc29sdXRpb24gY29udGV4dCBkZXBlbmRlbnQpLgotVGhlcmVmb3JlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgbXVzdCBiZSBkaXN0aW5jdCBmb3IgZWFjaCBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZS4KLV0KLUluIG9yZGVyIHRvIGNyZWF0ZSBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgYXQgbGVhc3QgdHdvIGZ1bmN0aW9uIHR5cGVzIChiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3ZlcmxvYWQgYmV0d2VlbiBvbmUgb3IgemVybyBmdW5jdGlvbnMpLgotCi1bZW5kc2VjdF0KLQotW3NlY3Rpb24gV2l0aG91dCBGdW5jdGlvbiBUeXBlc10KLQotRm9yIGNvbnZlbmllbmNlLCB0aGlzIGxpYnJhcnkgYWxzbyBwcm92aWRlcyB0aGUgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0gZnVuY3Rpb24gdGVtcGxhdGUgd2hpY2ggYWxsb3dzIHRvIGNyZWF0ZSB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3Qgd2l0aG91dCBleHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uIHR5cGVzLgotVGhlIGZ1bmN0aW9uIHR5cGVzIGFyZSBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlIGFwcHJvcHJpYXRlIFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0gaW5zdGFudGlhdGlvbiBpcyByZXR1cm5lZCBieSBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXS4KLQotVGhlIFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dIGZ1bmN0aW9uIHRlbXBsYXRlIGNhbiBiZSB1c2VmdWwgd2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggX19Cb29zdF9UeXBlb2ZfXydzIGBCT09TVF9BVVRPYCAob3IgQysrMTEgYGF1dG9gKS4KLUZvciBleGFtcGxlIChzZWUgYWxzbyBbQC4uLy4uL3Rlc3QvbWFrZV9kZWNsLmNwcCA9bWFrZV9kZWNsLmNwcD1dIGFuZCBbQC4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwID1pZGVudGl0eS5ocHA9XSk6Ci0KLVtpZGVudGl0eV9tYWtlX2RlY2xdCi0KLU5vdGUgaG93IHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCBgaWRlbnRpdHlgIGhhcyBiZWVuIGNyZWF0ZWQgc3BlY2lmeWluZyBvbmx5IHRoZSBmdW5jdGlvbnMgYGlkZW50aXR5X3NgLCBgaWRlbnRpdHlfaWAsIGBpZGVudGl0eV9kYCBhbmQgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiB0eXBlcyBgY29uc3Qgc3RkOjpzdHJpbmcmIChjb25zdCBzdGQ6OnN0cmluZyYpYCwgYGludCAoaW50KWAsIGFuZCBgZG91YmxlIChkb3VibGUpYCBhcyByZXF1aXJlZCBpbnN0ZWFkIGJ5IFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0uCi1UaGVyZWZvcmUsIFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dIHByb3ZpZGVzIGEgbW9yZSBjb25jaXNlIHN5bnRheCBpbiB0aGlzIGNvbnRleHQgd2hlbiBjb21wYXJlZCB3aXRoIFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0uCi0KLUFub3RoZXIgY2FzZSB3aGVyZSBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXSBjYW4gYmUgdXNlZnVsIGlzIHdoZW4gdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IGlzIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRlbXBsYXRlIHdoaWNoIGNhbiBob2xkIHRoZSBzcGVjaWZpYyBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dIHR5cGUgdXNpbmcgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuCi1Gb3IgZXhhbXBsZSAoc2VlIGFsc28gW0AuLi8uLi90ZXN0L21ha2VfY2FsbC5jcHAgPW1ha2VfY2FsbC5jcHA9XSBhbmQgW0AuLi8uLi90ZXN0L2lkZW50aXR5LmhwcCA9aWRlbnRpdHkuaHBwPV0pOgotCi1baWRlbnRpdHlfbWFrZV9jaGVja3NdCi1baWRlbnRpdHlfbWFrZV9jYWxsXQotCi1UaGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBvZiBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXSB1c2VzIF9fQm9vc3RfVHlwZW9mX18gdG8gYXV0b21hdGljYWxseSBkZWR1Y2Ugc29tZSBvZiB0aGUgZnVuY3Rpb24gdHlwZXMuCi1JbiBvcmRlciB0byBjb21waWxlIGNvZGUgaW4gX19Cb29zdF9UeXBlb2ZfXyBlbXVsYXRpb24gbW9kZSwgYWxsIHR5cGVzIHNob3VsZCBiZSBwcm9wZXJseSByZWdpc3RlcmVkIHVzaW5nIGBCT09TVF9UWVBFT0ZfUkVHSVNURVJfVFlQRWAgYW5kIGBCT09TVF9UWVBFT0ZfUkVHSVNURVJfVEVNUExBVEVgLCBvciBhcHByb3ByaWF0ZSBfX0Jvb3N0X1R5cGVvZl9fIGhlYWRlcnMgc2hvdWxkIGJlIGluY2x1ZGVkIChzZWUgX19Cb29zdF9UeXBlb2ZfXyBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCi1Gb3IgdGhlIGFib3ZlIGV4YW1wbGVzLCBpdCBpcyBzdWZmaWNpZW50IHRvIGluY2x1ZGUgdGhlIF9fQm9vc3RfVHlwZW9mX18gaGVhZGVyIHRoYXQgcmVnaXN0ZXJzIGBzdGQ6OnN0cmluZ2AgKHRoaXMgbGlicmFyeSBkb2VzIG5vdCByZXF1aXJlIHRvIHJlZ2lzdGVyIGBib29zdDo6ZnVuY3Rpb25gIGZvciBfX0Jvb3N0X1R5cGVvZl9fIGVtdWxhdGlvbik6Ci0KLVtpZGVudGl0eV90eXBlb2ZdCi0KLVtlbmRzZWN0XQotCi1bZW5kc2VjdF0KLQotW3hpbmNsdWRlIHJlZmVyZW5jZS54bWxdCi0KLVtzZWN0aW9uIEFja25vd2xlZGdtZW50c10KLQotTWFueSB0aGFua3MgdG8gTWF0aGlhcyBHYXVuYXJkIGZvciBzdWdnZXN0aW5nIHRvIGltcGxlbWVudCBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dIGFuZCBmb3Igc29tZSBzYW1wbGUgY29kZS4KLQotVGhhbmtzIHRvIEpvaG4gQnl0aGV3YXkgZm9yIHN1Z2dlc3RpbmcgdG8gaW1wbGVtZW50IFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dLgotCi1UaGFua3MgdG8gTmF0aGFuIFJpZGdlIGZvciBzdWdnZXN0aW9ucyBvbiBob3cgdG8gaW1wbGVtZW50IFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dLgotCi1UaGFua3MgdG8gUm9iZXJ0IFN0ZXdhcnQgZm9yIGNvbW1lbnRpbmcgb24gdGhlIGxpYnJhcnkgbmFtZS4KLQotTWFueSB0aGFua3MgdG8gdGhlIGVudGlyZSBfX0Jvb3N0X18gY29tbXVuaXR5IGFuZCBtYWlsaW5nIGxpc3QgZm9yIHByb3ZpZGluZyB2YWx1YWJsZSBjb21tZW50cyBhYm91dCB0aGlzIGxpYnJhcnkgYW5kIGdyZWF0IGluc2lnaHRzIG9uIHRoZSBDKysgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCi0KLVtlbmRzZWN0XQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBiMzM2Mi4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgVVJMPWRvYy9odG1sL2luZGV4Lmh0bWwiPgotICA8L2hlYWQ+Ci0gIDxib2R5PgotICAgIEF1dG9tYXRpYyByZWRpcmVjdGlvbiBmYWlsZWQsIGNsaWNrIHRoaXMgCi0gICAgPGEgaHJlZj0iZG9jL2h0bWwvaW5kZXguaHRtbCI+bGluazwvYT4gJm5ic3A7PGhyPgotICAgIDxwPqkgQ29weXJpZ2h0IExvcmVuem8gQ2FtaW5pdGksIDIwMDktMjAxMjwvcD4KLSAgICA8cD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHNlZSAKLSAgICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPgotICAgIExJQ0VOU0VfMV8wLnR4dDwvYT4gb3IgYSBjb3B5IGF0Ci0gICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9wPgotICA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzFlZTUuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9KYW1maWxlLnYyCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotCi0jIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIExvcmVuem8gQ2FtaW5pdGkKLSMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCi0jIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAotIyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KLQotaW1wb3J0IHRlc3RpbmcgOwotCi0jIFN1biBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGRldGVjdCB0eXBlLW9mIGVtdWxhdGlvbiAoZm9yY2UgaXQpLgotcHJvamVjdCA6IHJlcXVpcmVtZW50cyA8dG9vbHNldD5zdW46PGRlZmluZT5CT09TVF9UWVBFT0ZfRU1VTEFUSU9OIDsKLQotcnVuIGZ1bmN0b3IuY3BwIDsKLXJ1biBtYWtlX2RlY2wuY3BwIDsKLXJ1biBtYWtlX2NhbGwuY3BwIDsKLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9mdW5jdG9yLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvZnVuY3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OGQ5NzcuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9mdW5jdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCi0vLyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KLQotI2luY2x1ZGUgImlkZW50aXR5LmhwcCIKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotaW50IG1haW4oKSB7Ci0gICAgLy9baWRlbnRpdHlfY2FsbHMKLSAgICBCT09TVF9URVNUKGlkZW50aXR5X3MoImFiYyIpID09ICJhYmMiKTsKLSAgICBCT09TVF9URVNUKGlkZW50aXR5X2koMTIzKSA9PSAxMjMpOwotICAgIEJPT1NUX1RFU1QoaWRlbnRpdHlfZCgxLjIzKSA9PSAxLjIzKTsKLSAgICAvL10KLQotICAgIC8vW2lkZW50aXR5X2Z1bmN0b3IKLSAgICBuZG5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwKLSAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgKGNvbnN0IHN0ZDo6c3RyaW5nJikKLSAgICAgICAgLCBpbnQgKGludCkKLSAgICAgICAgLCBkb3VibGUgKGRvdWJsZSkKLSAgICA+IGlkZW50aXR5KGlkZW50aXR5X3MsIGlkZW50aXR5X2ksIGlkZW50aXR5X2QpOwotCi0gICAgLy8gQWxsIGNhbGxzIHZpYSBzaW5nbGUgYGlkZW50aXR5YCBmdW5jdGlvbi4KLSAgICBCT09TVF9URVNUKGlkZW50aXR5KCJhYmMiKSA9PSAiYWJjIik7Ci0gICAgQk9PU1RfVEVTVChpZGVudGl0eSgxMjMpID09IDEyMyk7Ci0gICAgQk9PU1RfVEVTVChpZGVudGl0eSgxLjIzKSA9PSAxLjIzKTsKLSAgICAvL10KLQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L2lkZW50aXR5LmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvaWRlbnRpdHkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWM1YTJjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvaWRlbnRpdHkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKLS8vIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8gSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgotCi0jaWZuZGVmIElERU5USVRZX0hQUF8KLSNkZWZpbmUgSURFTlRJVFlfSFBQXwotCi0vL1tpZGVudGl0eV90eXBlb2YKLSNpbmNsdWRlIDxib29zdC90eXBlb2Yvc3RkL3N0cmluZy5ocHA+IC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYG5kbmJvb3N0OjpmdW5jdGlvbmAuCi0vL10KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0vL1tpZGVudGl0eV9kZWNscwotY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aXR5X3MoY29uc3Qgc3RkOjpzdHJpbmcmIHgpIC8vIEZ1bmN0aW9uIChhcyBwb2ludGVyKS4KLSAgICB7IHJldHVybiB4OyB9Ci0KLWludCBpZGVudGl0eV9pX2ltcGwoaW50IHgpIHsgcmV0dXJuIHg7IH0KLWludCAoJmlkZW50aXR5X2kpKGludCkgPSBpZGVudGl0eV9pX2ltcGw7IC8vIEZ1bmN0aW9uIHJlZmVyZW5jZS4KLQotZG91YmxlIGlkZW50aXR5X2RfaW1wbChkb3VibGUgeCkgeyByZXR1cm4geDsgfQotbmRuYm9vc3Q6OmZ1bmN0aW9uPGRvdWJsZSAoZG91YmxlKT4gaWRlbnRpdHlfZCA9IGlkZW50aXR5X2RfaW1wbDsgLy8gRnVuY3Rvci4KLS8vXQotCi0jZW5kaWYgLy8gI2luY2x1ZGUgZ3VhcmQKLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2NhbGwuY3BwIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2NhbGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzU1YjUyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvbWFrZV9jYWxsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCi0vLyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KLQotI2luY2x1ZGUgImlkZW50aXR5LmhwcCIKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotLy9baWRlbnRpdHlfbWFrZV9jaGVja3MKLXRlbXBsYXRlPHR5cGVuYW1lIEY+Ci12b2lkIGNoZWNrKEYgaWRlbnRpdHkpIHsKLSAgICBCT09TVF9URVNUKGlkZW50aXR5KCJhYmMiKSA9PSAiYWJjIik7Ci0gICAgQk9PU1RfVEVTVChpZGVudGl0eSgxMjMpID09IDEyMyk7Ci0gICAgQk9PU1RfVEVTVChpZGVudGl0eSgxLjIzKSA9PSAxLjIzKTsKLX0KLS8vXQotCi1pbnQgbWFpbigpIHsKLSAgICAvL1tpZGVudGl0eV9tYWtlX2NhbGwKLSAgICBjaGVjayhuZG5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uKGlkZW50aXR5X3MsIGlkZW50aXR5X2ksIGlkZW50aXR5X2QpKTsKLSAgICAvL10KLSAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2RlY2wuY3BwIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2RlY2wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzY4MzRlLi4wMDAwMDAwCi0tLSBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvbWFrZV9kZWNsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCi0vLyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KLQotI2luY2x1ZGUgImlkZW50aXR5LmhwcCIKLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVvZi90eXBlb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KLQotaW50IG1haW4oKSB7Ci0gICAgLy9baWRlbnRpdHlfbWFrZV9kZWNsCi0gICAgQk9PU1RfQVVUTyhpZGVudGl0eSwgbmRuYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbigKLSAgICAgICAgICAgIGlkZW50aXR5X3MsIGlkZW50aXR5X2ksIGlkZW50aXR5X2QpKTsKLQotICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoImFiYyIpID09ICJhYmMiKTsKLSAgICBCT09TVF9URVNUKGlkZW50aXR5KDEyMykgPT0gMTIzKTsKLSAgICBCT09TVF9URVNUKGlkZW50aXR5KDEuMjMpID09IDEuMjMpOwotICAgIC8vXQotICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOwotfQotCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvcHRyX2Z1bi5odG1sIGIvbGlicy9mdW5jdGlvbmFsL3B0cl9mdW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjNjJiNC4uMDAwMDAwMAotLS0gYS9saWJzL2Z1bmN0aW9uYWwvcHRyX2Z1bi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj4KLQotICA8dGl0bGU+Qm9vc3QgRnVuY3Rpb24gT2JqZWN0IEFkYXB0ZXIgTGlicmFyeTwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgotICA8dGFibGUgYm9yZGVyPSIxIiBiZ2NvbG9yPSIjMDA3RjdGIiBjZWxscGFkZGluZz0iMiIgc3VtbWFyeT0iIj4KLSAgICA8dHI+Ci0gICAgICA8dGQgYmdjb2xvcj0iI0ZGRkZGRiI+PGltZyBzcmM9Ii4uLy4uL2Jvb3N0LnBuZyIgYWx0PQotICAgICAgImJvb3N0LnBuZyAoNjg5NyBieXRlcykiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KLSAgICAgICIjRkZGRkZGIj48YmlnPkhvbWU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9saWJyYXJpZXMuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5MaWJyYXJpZXM8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvcGVvcGxlLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+UGVvcGxlPC9iaWc+PC9mb250PjwvYT48L3RkPgotCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9mYXEuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9Ci0gICAgICAiI0ZGRkZGRiI+PGJpZz5GQVE8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+Ci0KLSAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9tb3JlL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQotICAgICAgIiNGRkZGRkYiPjxiaWc+TW9yZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDxoMT5GdW5jdGlvbiBQb2ludGVyIEFkYXB0ZXJzPC9oMT4KLQotICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KLSAgcHJvdmlkZXMgZW5oYW5jZWQgdmVyc2lvbnMgb2YgYm90aCB0aGUgZnVuY3Rpb24gcG9pbnRlciBhZGFwdGVycyBmcm9tIHRoZQotICBDKysgU3RhbmRhcmQgTGlicmFyeSAoJnNlY3Q7MjAuMy43KTo8L3A+Ci0KLSAgPHVsPgotICAgIDxsaT48dHQ+cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjwvdHQ+PC9saT4KLQotICAgIDxsaT48dHQ+cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+QXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBoZWxwZXIgZnVuY3Rpb24gdGVtcGxhdGU6PC9wPgotCi0gIDx1bD4KLSAgICA8bGk+PHR0PnB0cl9mdW48L3R0PjwvbGk+Ci0gIDwvdWw+Ci0KLSAgPHA+SG93ZXZlciwgeW91IHNob3VsZCBub3QgbmVlZCB0byB1c2UgdGhlIGFkYXB0ZXJzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gIGFkYXB0ZXJzIGluIHRoaXMgbGlicmFyeSBkdWUgdG8gb3VyIHVzZSBvZiA8YSBocmVmPQotICAiZnVuY3Rpb25fdHJhaXRzLmh0bWwiPmZ1bmN0aW9uIG9iamVjdCB0cmFpdHM8L2E+LiBZb3Ugd2lsbCBob3dldmVyIG5lZWQgdG8KLSAgdXNlIHRoZW0gaWYgeW91ciBpbXBsZW1lbnRhdGlvbiBmYWlscyB0byB3b3JrIHByb3Blcmx5IHdpdGggb3VyIHRyYWl0cwotICBjbGFzc2VzIChkdWUgdG8gbGFjayBpZiBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uKSwgb3IgaWYgeW91IHdpc2ggdG8gdXNlIGEKLSAgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXIgZnJvbSBhIHRoaXJkIHBhcnR5LjwvcD4KLQotICA8aDM+VXNhZ2U8L2gzPgotCi0gIDxwPklmIHlvdSBuZWVkIHRvIHVzZSB0aGVzZSBhZGFwdGVycywgdXNhZ2UgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdGFuZGFyZAotICBmdW5jdGlvbiBwb2ludGVyIGFkYXB0ZXJzLiBGb3IgZXhhbXBsZSw8L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLWJvb2wgYmFkKHN0ZDo6c3RyaW5nIGZvbykgeyAuLi4gfQotLi4uCi1zdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsgYzsKLS4uLgotc3RkOjp2ZWN0b3ImbHQ7c3RkOjpzdHJpbmcmZ3Q7OjppdGVyYXRvciBpdAotICAgICA9IHN0ZDo6ZmluZF9pZihjLmJlZ2luKCksIGMuZW5kKCksIHN0ZDo6bm90MShib29zdDo6cHRyX2Z1bihiYWQpKSk7Ci08L3ByZT4KLSAgPC9ibG9ja3F1b3RlPgotCi0gIDxwPk5vdGUgaG93ZXZlciB0aGF0IHRoaXMgbGlicmFyeSBjb250YWlucyBlbmhhbmNlZCA8YSBocmVmPQotICAibmVnYXRvcnMuaHRtbCI+bmVnYXRvcnM8L2E+IHRoYXQgc3VwcG9ydCBmdW5jdGlvbiBvYmplY3QgdHJhaXRzLCBzbyB0aGUKLSAgbGluZSBhYm92ZSBjb3VsZCBlcXVhbGx5IGJlIHdyaXR0ZW48L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLXN0ZDo6dmVjdG9yJmx0O3N0ZDo6c3RyaW5nJmd0Ozo6aXRlcmF0b3IgaXQKLSAgICAgPSBzdGQ6OmZpbmRfaWYoYy5iZWdpbigpLCBjLmVuZCgpLCBib29zdDo6bm90MShiYWQpKTsKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPGgzPkFyZ3VtZW50IFR5cGVzPC9oMz4KLQotICA8cD5UaGUgc3RhbmRhcmQgZGVmaW5lcyA8dHQ+cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjwvdHQ+IGxpa2UgdGhpcwotICAoJnNlY3Q7MjAuMy44Jm5ic3A7JnBhcmE7Mik6PC9wPgotCi0gIDxibG9ja3F1b3RlPgotICAgIDxwcmU+Ci10ZW1wbGF0ZSAmbHQ7Y2xhc3MgQXJnLCBjbGFzcyBSZXN1bHQmZ3Q7Ci1jbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O0FyZywgUmVzdWx0Jmd0OyB7Ci1wdWJsaWM6Ci0gIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oUmVzdWx0ICgqIGYpKDxzdHJvbmc+QXJnPC9zdHJvbmc+KSk7Ci0gIFJlc3VsdCBvcGVyYXRvcigpKDxzdHJvbmc+QXJnPC9zdHJvbmc+IHgpIGNvbnN0OwotfTsKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+Tm90ZSB0aGF0IHRoZSBhcmd1bWVudCB0byA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGlzIGV4YWN0bHkgdGhlIHNhbWUgdHlwZQotICBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24uIElmIHRoaXMgaXMgYSB2YWx1ZSB0eXBlLCB0aGUKLSAgYXJndW1lbnQgd2lsbCBiZSBwYXNzZWQgYnkgdmFsdWUgYW5kIGNvcGllZCB0d2ljZS4KLSAgPHR0PnBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPC90dD4gaGFzIGEgc2ltaWxhciBwcm9ibGVtLjwvcD4KLQotICA8cD5Ib3dldmVyLCBpZiB3ZSB3ZXJlIHRvIHRyeSBhbmQgZWxpbWluYXRlIHRoaXMgaW5lZmZpY2llbmN5IGJ5IGluc3RlYWQKLSAgZGVjbGFyaW5nIHRoZSBhcmd1bWVudCBhcyA8dHQ+Y29uc3QmbmJzcDtBcmcmYW1wOzwvdHQ+LCB0aGVuIGlmIEFyZyB3ZXJlIGEKLSAgcmVmZXJlbmNlIHR5cGUsIHdlIHdvdWxkIGhhdmUgYSByZWZlcmVuY2UgdG8gYSByZWZlcmVuY2UsIHdoaWNoIGlzCi0gIGN1cnJlbnRseSBpbGxlZ2FsIChidXQgc2VlIDxhIGhyZWY9Ci0gICJodHRwOi8vYW51YmlzLmRrdXVnLmRrL2p0YzEvc2MyMi93ZzIxL2RvY3MvY3dnX2FjdGl2ZS5odG1sIzEwNiI+QysrIGNvcmUKLSAgbGFuZ3VhZ2UgaXNzdWUgbnVtYmVyIDEwNik8L2E+PC9wPgotCi0gIDxwPlNvIHRoZSB3YXkgaW4gd2hpY2ggd2Ugd2FudCB0byBkZWNsYXJlIHRoZSBhcmd1bWVudCBmb3IKLSAgPHR0Pm9wZXJhdG9yKCk8L3R0PiBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSB3cmFwcGVkIGZ1bmN0aW9uJ3MKLSAgYXJndW1lbnQgaXMgYSByZWZlcmVuY2UuIElmIGl0IGlzIGEgcmVmZXJlbmNlLCB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgc2ltcGx5Ci0gIGFzIDx0dD5Bcmc8L3R0PjsgaWYgaXQgaXMgYSB2YWx1ZSB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgYXMKLSAgPHR0PmNvbnN0Jm5ic3A7QXJnJmFtcDs8L3R0Pi48L3A+Ci0KLSAgPHA+VGhlIEJvb3N0IDxhIGhyZWY9Ii4uL3V0aWxpdHkvY2FsbF90cmFpdHMuaHRtIj5jYWxsX3RyYWl0czwvYT4gY2xhc3MKLSAgdGVtcGxhdGUgY29udGFpbnMgYSA8dHQ+cGFyYW1fdHlwZTwvdHQ+IHR5cGVkZWYsIHdoaWNoIHVzZXMgcGFydGlhbAotICBzcGVjaWFsaXNhdGlvbiB0byBtYWtlIHByZWNpc2VseSB0aGlzIGRlY2lzaW9uLiBCeSBkZWNsYXJpbmcgdGhlCi0gIDx0dD5vcGVyYXRvcigpPC90dD4gYXM8L3A+Ci0KLSAgPGJsb2NrcXVvdGU+Ci0gICAgPHByZT4KLVJlc3VsdCBvcGVyYXRvcigpKHR5cGVuYW1lIGNhbGxfdHJhaXRzJmx0O0FyZyZndDs6OnBhcmFtX3R5cGUgeCkgY29uc3QKLTwvcHJlPgotICA8L2Jsb2NrcXVvdGU+Ci0KLSAgPHA+d2UgYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1bHQgLSB3ZSBpbXByb3ZlIGVmZmljaWVuY3kgd2l0aG91dCBnZW5lcmF0aW5nCi0gIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcy48L3A+Ci0KLSAgPGgzPkxpbWl0YXRpb25zPC9oMz4KLQotICA8cD5UaGUgY2FsbCB0cmFpdHMgdGVtcGxhdGUgdXNlZCB0byByZWFsaXNlIHRoaXMgaW1wcm92ZW1lbnQgcmVsaWVzIG9uCi0gIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24sIHNvIHRoaXMgaW1wcm92ZW1lbnQgaXMgb25seSBhdmFpbGFibGUgb24gY29tcGlsZXJzCi0gIHRoYXQgc3VwcG9ydCB0aGF0IGZlYXR1cmUuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZQotICBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLCB0aHVzIGdlbmVyYXRpbmcgdGhlCi0gIHBvc3NpYmlsaXR5IG9mIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcy48L3A+Ci0gIDxocj4KLQotICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KLSAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKLSAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgotCi0gIDxwPlJldmlzZWQgCi0gIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKLSAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+Ci0KLSAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+Ci0KLSAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgotICBjb3B5IGF0IDxhIGhyZWY9Ci0gICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9zdWJsaWJzIGIvbGlicy9mdW5jdGlvbmFsL3N1YmxpYnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL3N1YmxpYnMKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL3Rlc3QvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC90ZXN0L0phbWZpbGUudjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZTM3OWMuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL3Rlc3QvSmFtZmlsZS52MgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI34gQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgKLSN+IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLSN+IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi1pbXBvcnQgdGVzdGluZyA7Ci0KLXRlc3Qtc3VpdGUgZnVuY3Rpb25hbCA6Ci0gICAgWyBydW4gZnVuY3Rpb25fdGVzdC5jcHAgXQotICAgIDsKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC90ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNjNiZWEuLjAwMDAwMDAKLS0tIGEvbGlicy9mdW5jdGlvbmFsL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDAgQ2FkZW56YSBOZXcgWmVhbGFuZCBMdGQKLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnktCi0vLyBpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRlc3RzIGZvciB0aGUgQm9vc3QgZnVuY3Rpb25hbC5ocHAgaGVhZGVyIGZpbGUKLS8vCi0vLyBOb3RlIHRoYXQgZnVuY3Rpb25hbC5ocHAgcmVsaWVzIG9uIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24gdG8gYmUKLS8vIGVmZmVjdGl2ZS4gIElmIHlvdXIgY29tcGlsZXIgbGFja3MgdGhpcyBmZWF0dXJlLCB2ZXJ5IGZldyBvZiB0aGUKLS8vIHRlc3RzIHdvdWxkIGNvbXBpbGUsIGFuZCBzbyBoYXZlIGJlZW4gZXhjbHVkZWQgZnJvbSB0aGUgdGVzdC4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gJElkOiBmdW5jdGlvbl90ZXN0LmNwcCA1MDQ1NiAyMDA5LTAxLTA0IDA1OjE3OjAyWiBiZ3ViZW5rbyAkCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICRMb2ckCi0vLyBSZXZpc2lvbiAxLjMgIDIwMDYvMTIvMDIgMTM6NTc6MzIgIGFuZHJlYXNfaHViZXI2OQotLy8gRml4ZWQgbGljZW5zZSAmIGNvcHlyaWdodCBpc3N1ZXMuCi0vLwotLy8gRnJvbSBNYXJrIFJvZGdlcnMgRnJpIERlYyAxIDEyOjU5OjE0IDIwMDYKLS8vIFgtQXBwYXJlbnRseS1UbzogYWhkNjk3NC1ib29zdG9yZyAtYXQtIHlhaG9vLmNvbSB2aWEgNjguMTQyLjIwNi4xNjA7IEZyaSwgMDEgRGVjIDIwMDYgMTI6NTk6NDEgLTA4MDAKLS8vIFgtT3JpZ2luYXRpbmctSVA6IFsxOTUuMTEyLjQuNTRdCi0vLyBSZXR1cm4tUGF0aDogPG1hcmsucm9kZ2VycyAtYXQtIGNhZGVuemEuY28ubno+Ci0vLyBBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtdGE1NTAubWFpbC5tdWQueWFob28uY29tIGZyb209Y2FkZW56YS5jby5uejsgZG9tYWlua2V5cz1uZXV0cmFsIChubyBzaWcpCi0vLyBSZWNlaXZlZDogZnJvbSAxOTUuMTEyLjQuNTQgKEVITE8gc210cC5uaWxkcmFtLmNvLnVrKSAoMTk1LjExMi40LjU0KSBieSBtdGE1NTAubWFpbC5tdWQueWFob28uY29tIHdpdGggU01UUDsgRnJpLCAwMSBEZWMgMjAwNiAxMjo1OTo0MCAtMDgwMAotLy8gUmVjZWl2ZWQ6IGZyb20gc25hZ2dsZXB1c3MuY2FkZW56YS5jby5ueiAoODEtNi0yNDYtODcuZHluLmdvdGFkc2wuY28udWsgWzgxLjYuMjQ2Ljg3XSkgYnkgc210cC5uaWxkcmFtLmNvLnVrIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEQzMkVBMkI2RDhDIGZvciA8YWhkNjk3NC1ib29zdG9yZyAtYXQtIHlhaG9vLmNvbT47IEZyaSwgMSBEZWMgMjAwNiAyMDo1OTozNSArMDAwMCAoR01UKQotLy8gUmVjZWl2ZWQ6IGZyb20gcGVuZm9sZC5jYWRlbnphLmNvLm56IChbMTkyLjE2OC41NS41Nl0pIGJ5IHNuYWdnbGVwdXNzLmNhZGVuemEuY28ubnogd2l0aCBlc210cCAoRXhpbSA0LjYzKSAoZW52ZWxvcGUtZnJvbSA8bWFyay5yb2RnZXJzIC1hdC0gY2FkZW56YS5jby5uej4pIGlkIEo5TTRZOS0wMDA5VE8tOUsgZm9yIGFoZDY5NzQtYm9vc3RvcmcgLWF0LSB5YWhvby5jb207IEZyaSwgMDEgRGVjIDIwMDYgMjA6NTg6NTcgKzAwMDAKLS8vIE1lc3NhZ2UtSUQ6IDw0NTcwOTdBMi4xMDkwMzA1QGNhZGVuemEuY28ubno+Ci0vLyBEYXRlOiBGcmksIDAxIERlYyAyMDA2IDIwOjU5OjE0ICswMDAwCi0vLyBGcm9tOiAiTWFyayBSb2RnZXJzIiA8bWFyay5yb2RnZXJzIC1hdC0gY2FkZW56YS5jby5uej4KLS8vIFVzZXItQWdlbnQ6IFRodW5kZXJiaXJkIDEuNS4wLjggKE1hY2ludG9zaC8yMDA2MTAyNSkKLS8vIE1JTUUtVmVyc2lvbjogMS4wCi0vLyBUbzogYWhkNjk3NC1ib29zdG9yZyAtYXQtIHlhaG9vLmNvbSBbRWRpdCAtIERlbGV0ZV0KLS8vIFN1YmplY3Q6IFJlOiBbYm9vc3RdIFJlbWluZGVyOiBOZWVkIHlvdXIgcGVybWlzc2lvbiB0byBjb3JyZWN0IGxpY2Vuc2UgJiBjb3B5cmlnaHQgaXNzdWVzCi0vLyBSZWZlcmVuY2VzOiA8Mzc5OTkwLjM2MDA3LnFtQHdlYjMzNTA3Lm1haWwubXVkLnlhaG9vLmNvbT4KLS8vIEluLVJlcGx5LVRvOiA8Mzc5OTkwLjM2MDA3LnFtQHdlYjMzNTA3Lm1haWwubXVkLnlhaG9vLmNvbT4KLS8vIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xOyBmb3JtYXQ9Zmxvd2VkCi0vLyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0Ci0vLyBDb250ZW50LUxlbmd0aDogODEyCi0vLyBHaWRkYXkgQW5kcmVhcwotLy8KLS8vIFN1cmUgdGhhdCdzIGZpbmUuICBJJ20gaGFwcHkgZm9yIHlvdSB0byBkbyAxLCAyIGFuZCAzLgotLy8KLS8vIFJlZ2FyZHMKLS8vIE1hcmsKLS8vCi0vLyBBbmRyZWFzIEh1YmVyIHdyb3RlOgotLy8gPiBIZWxsbyBNYXJrCi0vLyA+Ci0vLyA+IFF1aXRlIGEgd2hpbGUgYWdvIGl0IHdhcyBkZWNpZGVkIHRoYXQgZXZlcnkgZmlsZSB0aGF0IGdvZXMgaW50byB0aGUKLS8vID4gMS4zNCByZWxlYXNlIG9mIHRoZSBCb29zdCBkaXN0cmlidXRpb24gKHd3dy5ib29zdC5vcmcpIG5lZWRzIHVuaWZvcm0KLS8vID4gbGljZW5zZSBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlOgotLy8gPgotLy8gPiA8aHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9saWNlbnNlX2luZm8uaHRtbD4KLS8vID4KLS8vID4gWW91IGFyZSByZWNlaXZpbmcgdGhpcyBlbWFpbCBiZWNhdXNlIHNldmVyYWwgZmlsZXMgeW91IGNvbnRyaWJ1dGVkCi0vLyA+IGxhY2sgc3VjaCBpbmZvcm1hdGlvbiBvciBoYXZlIGFuIG9sZCBsaWNlbnNlOgotLy8gPgotLy8gPiBib29zdC9mdW5jdGlvbmFsL2Z1bmN0aW9uYWwuaHBwCi0vLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9iaW5kZXJzLmh0bWwKLS8vID4gYm9vc3QvbGlicy9mdW5jdGlvbmFsL2Z1bmN0aW9uX3Rlc3QuY3BwCi0vLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90cmFpdHMuaHRtbAotLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvaW5kZXguaHRtbAotLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvbWVtX2Z1bi5odG1sCi0vLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9uZWdhdG9ycy5odG1sCi0vLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9wdHJfZnVuLmh0bWwKLS8vID4gYm9vc3QvcGVvcGxlL21hcmtfcm9kZ2Vycy5odG0KLS8vID4KLS8vID4gSSB0aGVyZWZvcmUga2luZGx5IGFzayB5b3UgdG8gZ3JhbnQgdGhlIHBlcm1pc3Npb24gdG8gZG8gdGhlCi0vLyA+IGZvbGxvd2luZzoKLS8vID4KLS8vID4gMS4gRm9yIHRoZSBmaWxlcyBhYm92ZSB0aGF0IGFscmVhZHkgaGF2ZSBhIGxpY2Vuc2UgdGV4dCAoYWxsIGV4Y2VwdAotLy8gPiBtYXJrX3JvZGdlcnMuaHRtKSwgcmVwbGFjZSB0aGUgbGljZW5zZSB0ZXh0IHdpdGg6Ci0vLyA+Ci0vLyA+ICJEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vID4gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vID4gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSIKLS8vID4KLS8vID4gMi4gRm9yIHRoZSBmaWxlIHRoYXQgZG9lcyBub3QgeWV0IGhhdmUgYSBsaWNlbnNlIGFuZCBjb3B5cmlnaHQKLS8vID4gKG1hcmtfcm9kZ2Vycy5odG0pIGFkZCB0aGUgc2FtZSBsaWNlbnNlIHRleHQgYXMgdW5kZXIgMS4gYW5kIGFkZCB0aGUKLS8vID4gZm9sbG93aW5nIGNvcHlyaWdodDoKLS8vID4KLS8vID4gIihjKSBDb3B5cmlnaHQgTWFyayBSb2RnZXJzIDIwMDAiCi0vLyA+Ci0vLyA+IDMuIChPcHRpb25hbCkgSSB3b3VsZCBhbHNvIHdhbnQgdG8gY29udmVydCBhbGwgSFRNTCBmaWxlcyB0byBjb25mb3JtCi0vLyA+IHRoZSBIVE1MIDQuMDEgU3RhbmRhcmQgYnkgcnVubmluZyB0aGVtIHRocm91Z2ggSFRNTCBUaWR5LCBzZWUKLS8vID4gPGh0dHA6Ly90aWR5LnNmLm5ldD4KLS8vID4KLS8vID4gSXQgd291bGQgYmUgZ3JlYXQgaWYgeW91IGNvdWxkIGdyYW50IG1lIHBlcm1pc3Npb24gdG8gZG8gMSAmIDIgYW5kCi0vLyA+IG9wdGlvbmFsbHkgYWxzbyAzLgotLy8gPgotLy8gPiBUaGFuayB5b3UhCi0vLyA+Ci0vLyA+IFJlZ2FyZHMsCi0vLyA+Ci0vLyA+IEFuZHJlYXMgSHViZXIKLS8vID4KLS8vCi0vLyBSZXZpc2lvbiAxLjIgIDIwMDEvMDkvMjIgMTE6NTI6MjQgIGpvaG5tYWRkb2NrCi0vLyBJbnRlbCBDKysgZml4ZXM6IG5vIHZvaWQgcmV0dXJuIHR5cGVzIHN1cHBvcnRlZC4KLS8vCi0vLyBSZXZpc2lvbiAxLjEuMS4xICAyMDAwLzA3LzA3IDE2OjA0OjE4ICBiZW1hbgotLy8gMS4xNi4xIGluaXRpYWwgQ1ZTIGNoZWNraW4KLS8vCi0vLyBSZXZpc2lvbiAxLjMgIDIwMDAvMDYvMjYgMDk6NDQ6MDEgIG1hcmsKLS8vIFVwZGF0ZWQgZm9sbG93aW5nIGZlZWRiYWNrIGZyb20gSmVucyBNYXVyZXIuCi0vLwotLy8gUmV2aXNpb24gMS4yICAyMDAwLzA1LzE3IDA4OjMxOjQ1ICBtYXJrCi0vLyBBZGRlZCBleHRyYSB0ZXN0cyBub3cgdGhhdCBmdW5jdGlvbiB0cmFpdHMgd29yayBjb3JyZWN0bHkuCi0vLyBGb3IgY29tcGlsZXJzIHdpdGggbm8gc3VwcG9ydCBmb3IgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwKLS8vIGV4Y2x1ZGVkIHRlc3RzIHRoYXQgd29uJ3Qgd29yay4KLS8vCi0vLyBSZXZpc2lvbiAxLjEgIDIwMDAvMDUvMDcgMDk6MTQ6NDEgIG1hcmsKLS8vIEluaXRpYWwgcmV2aXNpb24KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUbyBkZW1vbnN0cmF0ZSB3aGF0IHRoZSBib29zdGVkIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycyBkbyBmb3IKLS8vIHlvdSwgdHJ5IGNvbXBpbGluZyB3aXRoIFVTRV9TVEQgZGVmaW5lZC4gIFRoaXMgd2lsbCBlbmRlYXZvdXIgdG8KLS8vIHVzZSB0aGUgc3RhbmRhcmQgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzLCBidXQgaXMgbGlrZWx5IHRvIHJlc3VsdAotLy8gaW4gbnVtZXJvdXMgZXJyb3JzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHlvdSBjYW5ub3QgaGF2ZSByZWZlcmVuY2VzCi0vLyB0byByZWZlcmVuY2VzLgotI2lmZGVmIFVTRV9TVEQKLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2RlZmluZSBib29zdCBzdGQKLSNlbHNlCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1jbGFzcyBQZXJzb24KLXsKLSAgcHVibGljOgotICAgIFBlcnNvbigpIHt9Ci0gICAgUGVyc29uKGNvbnN0IGNoYXIgKm4pIDogbmFtZShuKSB7fQotCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldF9uYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQotICAgIHZvaWQgcHJpbnQoc3RkOjpvc3RyZWFtICZvcykgY29uc3QgeyBvcyA8PCBuYW1lIDw8ICIgIjsgfQotICAgIHZvaWQgc2V0X25hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJm4pIHsgbmFtZSA9IG47IHN0ZDo6Y291dCA8PCBuYW1lIDw8ICIgIjsgfQotICAgIHN0ZDo6c3RyaW5nIGNsZWFyX25hbWUoKSB7IHN0ZDo6c3RyaW5nIHJldCA9IG5hbWU7IG5hbWUgPSAiIjsgcmV0dXJuIHJldDsgfQotICAgIHZvaWQgZG9fc29tZXRoaW5nKGludCkgY29uc3Qge30KLQotICAgIGJvb2wgaXNfZnJlZCgpIGNvbnN0IHsgcmV0dXJuIG5hbWUgPT0gIkZyZWQiOyB9Ci0gICAgCi0gIHByaXZhdGU6Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLX07Ci0KLW5hbWVzcGFjZQotewotICAgIGJvb2wgaXNfZXF1YWwoY29uc3Qgc3RkOjpzdHJpbmcgJnMxLCBjb25zdCBzdGQ6OnN0cmluZyAmczIpCi0gICAgewotICAgICAgICByZXR1cm4gczEgPT0gczI7Ci0gICAgfQotCi0gICAgYm9vbCBpc19iZXR0eShjb25zdCBzdGQ6OnN0cmluZyAmcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBzID09ICJCZXR0eSI7Ci0gICAgfQotCi0gICAgdm9pZCBkb19zZXRfbmFtZShQZXJzb24gKnAsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcC0+c2V0X25hbWUobmFtZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZG9fc2V0X25hbWVfcmVmKFBlcnNvbiAmcCwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi0gICAgewotICAgICAgICBwLnNldF9uYW1lKG5hbWUpOwotICAgIH0KLX0KLQotaW50IG1haW4oKQotewotICAgIHN0ZDo6dmVjdG9yPFBlcnNvbj4gdjE7Ci0gICAgdjEucHVzaF9iYWNrKCJGcmVkIik7Ci0gICAgdjEucHVzaF9iYWNrKCJXaWxtYSIpOwotICAgIHYxLnB1c2hfYmFjaygiQmFybmV5Iik7Ci0gICAgdjEucHVzaF9iYWNrKCJCZXR0eSIpOwotCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGVyc29uPiBjdjEodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHYyOwotICAgIHYyLnB1c2hfYmFjaygiRnJlZCIpOwotICAgIHYyLnB1c2hfYmFjaygiV2lsbWEiKTsKLSAgICB2Mi5wdXNoX2JhY2soIkJhcm5leSIpOwotICAgIHYyLnB1c2hfYmFjaygiQmV0dHkiKTsKLQotICAgIFBlcnNvbiBwZXJzb247Ci0gICAgUGVyc29uICZyID0gcGVyc29uOwotCi0gICAgUGVyc29uIGZyZWQoIkZyZWQiKTsKLSAgICBQZXJzb24gd2lsbWEoIldpbG1hIik7Ci0gICAgUGVyc29uIGJhcm5leSgiQmFybmV5Iik7Ci0gICAgUGVyc29uIGJldHR5KCJCZXR0eSIpOwotICAgIHN0ZDo6dmVjdG9yPFBlcnNvbio+IHYzOwotICAgIHYzLnB1c2hfYmFjaygmZnJlZCk7Ci0gICAgdjMucHVzaF9iYWNrKCZ3aWxtYSk7Ci0gICAgdjMucHVzaF9iYWNrKCZiYXJuZXkpOwotICAgIHYzLnB1c2hfYmFjaygmYmV0dHkpOwotCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGVyc29uKj4gY3YzKHYzLmJlZ2luKCksIHYzLmVuZCgpKTsKLSAgICBzdGQ6OnZlY3Rvcjxjb25zdCBQZXJzb24qPiB2M2ModjMuYmVnaW4oKSwgdjMuZW5kKCkpOwotCi0gICAgc3RkOjpvc3RyZWFtICZvcyA9IHN0ZDo6Y291dDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pICYmICFkZWZpbmVkKF9fSUNMKQotICAgIC8vIHVuYXJ5X3RyYWl0cywgdW5hcnlfbmVnYXRlCi0gICAgc3RkOjp0cmFuc2Zvcm0odjIuYmVnaW4oKSwgdjIuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bm90MShpc19iZXR0eSkpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjp0cmFuc2Zvcm0odjEuYmVnaW4oKSwgdjEuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bm90MShuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6aXNfZnJlZCkpKTsKLQotICAgIC8vIGJpbmFyeV90cmFpdHMsIGJpbmFyeV9uZWdhdGUKLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OnRyYW5zZm9ybSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Ym9vbD4oc3RkOjpjb3V0LCAiICIpLAotICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpiaW5kMXN0KG5kbmJvb3N0Ojpub3QyKGlzX2VxdWFsKSwgIkJldHR5IikpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjp0cmFuc2Zvcm0odjIuYmVnaW4oKSwgdjIuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6YmluZDJuZChuZG5ib29zdDo6bm90Mihpc19lcXVhbCksICJCZXR0eSIpKTsKLQotICAgIC8vIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24KLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OnRyYW5zZm9ybSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Ym9vbD4oc3RkOjpjb3V0LCAiICIpLAotICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0Ojpub3QxKG5kbmJvb3N0OjpwdHJfZnVuKGlzX2JldHR5KSkpOwotCi0gICAgLy8gYmluYXJ5X3RyYWl0cywgYmluZDFzdCwgYmluZDJuZAotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6dHJhbnNmb3JtKHYyLmJlZ2luKCksIHYyLmVuZCgpLAotICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCi0gICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6OmJpbmQxc3QoaXNfZXF1YWwsICJCZXR0eSIpKTsKLQotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6dHJhbnNmb3JtKHYyLmJlZ2luKCksIHYyLmVuZCgpLAotICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCi0gICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6OmJpbmQybmQoaXNfZXF1YWwsICJCZXR0eSIpKTsKLQotICAgIC8vIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uLCBiaW5kMXN0Ci0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6OnB0cl9mdW4oZG9fc2V0X25hbWUpLCAmcGVyc29uKSk7Ci0KLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6cHRyX2Z1bihkb19zZXRfbmFtZV9yZWYpLCBwZXJzb24pKTsKLQotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KG5kbmJvb3N0OjpwdHJfZnVuKGRvX3NldF9uYW1lX3JlZiksIHIpKTsKLQotICAgIC8vIGJpbmFyeV90cmFpdHMKLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChkb19zZXRfbmFtZSwgJnBlcnNvbikpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QoZG9fc2V0X25hbWVfcmVmLCBwZXJzb24pKTsKLQotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KGRvX3NldF9uYW1lX3JlZiwgcikpOwotI2VuZGlmCi0KLSAgICAvLyBjb25zdF9tZW1fZnVuX3QKLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OnRyYW5zZm9ybSh2My5iZWdpbigpLCB2My5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpnZXRfbmFtZSkpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjp0cmFuc2Zvcm0oY3YzLmJlZ2luKCksIGN2My5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpnZXRfbmFtZSkpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjp0cmFuc2Zvcm0odjNjLmJlZ2luKCksIHYzYy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpnZXRfbmFtZSkpOwotCi0gICAgLy8gY29uc3RfbWVtX2Z1bl9yZWZfdAotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6dHJhbnNmb3JtKHYxLmJlZ2luKCksIHYxLmVuZCgpLAotICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxzdGQ6OnN0cmluZz4oc3RkOjpjb3V0LCAiICIpLAotICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjptZW1fZnVuX3JlZigmUGVyc29uOjpnZXRfbmFtZSkpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjp0cmFuc2Zvcm0oY3YxLmJlZ2luKCksIGN2MS5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6Z2V0X25hbWUpKTsKLQotI2lmbmRlZiBCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCi0gICAgLy8gY29uc3RfbWVtX2Z1bjFfdCwgYmluZDJuZAotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6Zm9yX2VhY2godjMuYmVnaW4oKSwgdjMuZW5kKCksIG5kbmJvb3N0OjpiaW5kMm5kKG5kbmJvb3N0OjptZW1fZnVuKCZQZXJzb246OnByaW50KSwgc3RkOjpjb3V0KSk7Ci0KLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OmZvcl9lYWNoKHYzLmJlZ2luKCksIHYzLmVuZCgpLCBuZG5ib29zdDo6YmluZDJuZChuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpwcmludCksIG9zKSk7Ci0KLSAgICAvLyBjb25zdF9tZW1fZnVuMV9yZWZfdCwgYmluZDJuZAotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6Zm9yX2VhY2godjEuYmVnaW4oKSwgdjEuZW5kKCksIG5kbmJvb3N0OjpiaW5kMm5kKG5kbmJvb3N0OjptZW1fZnVuX3JlZigmUGVyc29uOjpwcmludCksIHN0ZDo6Y291dCkpOwotCi0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjpmb3JfZWFjaCh2MS5iZWdpbigpLCB2MS5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQybmQobmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OnByaW50KSwgb3MpKTsKLQotICAgIC8vIG1lbV9mdW4xX3QsIGJpbmQxc3QKLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpzZXRfbmFtZSksICZwZXJzb24pKTsKLQotICAgIC8vIG1lbV9mdW4xX3JlZl90LCBiaW5kMXN0Ci0gICAgc3RkOjpjb3V0IDw8ICdcbic7Ci0gICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OnNldF9uYW1lKSwgcGVyc29uKSk7Ci0KLSAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKLSAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6c2V0X25hbWUpLCByKSk7Ci0jZW5kaWYKLQotICAgIC8vIG1lbV9mdW5fdAotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6dHJhbnNmb3JtKHYzLmJlZ2luKCksIHYzLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpjbGVhcl9uYW1lKSk7Ci0gICAgCi0gICAgLy8gbWVtX2Z1bl9yZWZfdAotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHN0ZDo6dHJhbnNmb3JtKHYxLmJlZ2luKCksIHYxLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKLSAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6Y2xlYXJfbmFtZSkpOyAgICAKLQotICAgIHN0ZDo6Y291dCA8PCAnXG4nOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9zbWFydF9wdHIvc3JjL3NwX2NvbGxlY3Rvci5jcHAgYi9saWJzL3NtYXJ0X3B0ci9zcmMvc3BfY29sbGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5ZjhlOS4uMDAwMDAwMAotLS0gYS9saWJzL3NtYXJ0X3B0ci9zcmMvc3BfY29sbGVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0vLwotLy8gIHNwX2NvbGxlY3Rvci5jcHAKLS8vCi0vLyAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIFBldGVyIERpbW92Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLQotI2lmIGRlZmluZWQoQk9PU1RfU1BfRU5BQkxFX0RFQlVHX0hPT0tTKQotCi0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9zaGFyZWRfcHRyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfbXV0ZXguaHBwPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi10eXBlZGVmIHN0ZDo6bWFwPCB2b2lkIGNvbnN0ICosIHN0ZDo6cGFpcjx2b2lkICosIHNpemVfdD4gPiBtYXBfdHlwZTsKLQotc3RhdGljIG1hcF90eXBlICYgZ2V0X21hcCgpCi17Ci0gICAgc3RhdGljIG1hcF90eXBlIG07Ci0gICAgcmV0dXJuIG07Ci19Ci0KLXR5cGVkZWYgbmRuYm9vc3Q6OmRldGFpbDo6bGlnaHR3ZWlnaHRfbXV0ZXggbXV0ZXhfdHlwZTsKLQotc3RhdGljIG11dGV4X3R5cGUgJiBnZXRfbXV0ZXgoKQotewotICAgIHN0YXRpYyBtdXRleF90eXBlIG07Ci0gICAgcmV0dXJuIG07Ci19Ci0KLXN0YXRpYyB2b2lkICogaW5pdF9tdXRleF9iZWZvcmVfbWFpbiA9ICZnZXRfbXV0ZXgoKTsKLQotbmFtZXNwYWNlCi17Ci0gICAgY2xhc3MgWDsKLQotICAgIHN0cnVjdCBjb3VudF9sYXlvdXQKLSAgICB7Ci0gICAgICAgIG5kbmJvb3N0OjpkZXRhaWw6OnNwX2NvdW50ZWRfYmFzZSAqIHBpOwotICAgICAgICBpbnQgaWQ7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBzaGFyZWRfcHRyX2xheW91dAotICAgIHsKLSAgICAgICAgWCAqIHB4OwotICAgICAgICBjb3VudF9sYXlvdXQgcG47Ci0gICAgfTsKLX0KLQotLy8gYXNzdW1lIDQgYnl0ZSBhbGlnbm1lbnQgZm9yIHBvaW50ZXJzIHdoZW4gc2Nhbm5pbmcKLXNpemVfdCBjb25zdCBwb2ludGVyX2FsaWduID0gNDsKLQotdHlwZWRlZiBzdGQ6Om1hcDx2b2lkIGNvbnN0ICosIGxvbmc+IG1hcDJfdHlwZTsKLQotc3RhdGljIHZvaWQgc2Nhbl9hbmRfY291bnQodm9pZCBjb25zdCAqIGFyZWEsIHNpemVfdCBzaXplLCBtYXBfdHlwZSBjb25zdCAmIG0sIG1hcDJfdHlwZSAmIG0yKQotewotICAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKiBwID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCAqPihhcmVhKTsKLQotICAgIGZvcihzaXplX3QgbiA9IDA7IG4gKyBzaXplb2Yoc2hhcmVkX3B0cl9sYXlvdXQpIDw9IHNpemU7IHAgKz0gcG9pbnRlcl9hbGlnbiwgbiArPSBwb2ludGVyX2FsaWduKQotICAgIHsKLSAgICAgICAgc2hhcmVkX3B0cl9sYXlvdXQgY29uc3QgKiBxID0gcmVpbnRlcnByZXRfY2FzdDxzaGFyZWRfcHRyX2xheW91dCBjb25zdCAqPihwKTsKLQotICAgICAgICBpZihxLT5wbi5pZCA9PSBuZG5ib29zdDo6ZGV0YWlsOjpzaGFyZWRfY291bnRfaWQgJiYgcS0+cG4ucGkgIT0gMCAmJiBtLmNvdW50KHEtPnBuLnBpKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICArK20yW3EtPnBuLnBpXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdHlwZWRlZiBzdGQ6OmRlcXVlPHZvaWQgY29uc3QgKj4gb3Blbl90eXBlOwotCi1zdGF0aWMgdm9pZCBzY2FuX2FuZF9tYXJrKHZvaWQgY29uc3QgKiBhcmVhLCBzaXplX3Qgc2l6ZSwgbWFwMl90eXBlICYgbTIsIG9wZW5fdHlwZSAmIG9wZW4pCi17Ci0gICAgdW5zaWduZWQgY2hhciBjb25zdCAqIHAgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyIGNvbnN0ICo+KGFyZWEpOwotCi0gICAgZm9yKHNpemVfdCBuID0gMDsgbiArIHNpemVvZihzaGFyZWRfcHRyX2xheW91dCkgPD0gc2l6ZTsgcCArPSBwb2ludGVyX2FsaWduLCBuICs9IHBvaW50ZXJfYWxpZ24pCi0gICAgewotICAgICAgICBzaGFyZWRfcHRyX2xheW91dCBjb25zdCAqIHEgPSByZWludGVycHJldF9jYXN0PHNoYXJlZF9wdHJfbGF5b3V0IGNvbnN0ICo+KHApOwotCi0gICAgICAgIGlmKHEtPnBuLmlkID09IG5kbmJvb3N0OjpkZXRhaWw6OnNoYXJlZF9jb3VudF9pZCAmJiBxLT5wbi5waSAhPSAwICYmIG0yLmNvdW50KHEtPnBuLnBpKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBvcGVuLnB1c2hfYmFjayhxLT5wbi5waSk7Ci0gICAgICAgICAgICBtMi5lcmFzZShxLT5wbi5waSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbmRfdW5yZWFjaGFibGVfb2JqZWN0c19pbXBsKG1hcF90eXBlIGNvbnN0ICYgbSwgbWFwMl90eXBlICYgbTIpCi17Ci0gICAgLy8gc2NhbiBvYmplY3RzIGZvciBzaGFyZWRfcHRyIG1lbWJlcnMsIGNvbXB1dGUgaW50ZXJuYWwgY291bnRzCi0KLSAgICB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiLi4uICIgPDwgbS5zaXplKCkgPDwgIiBvYmplY3RzIGluIG0uXG4iOwotCi0gICAgICAgIGZvcihtYXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG0uYmVnaW4oKTsgaSAhPSBtLmVuZCgpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5kbmJvb3N0OjpkZXRhaWw6OnNwX2NvdW50ZWRfYmFzZSBjb25zdCAqIHAgPSBzdGF0aWNfY2FzdDxuZG5ib29zdDo6ZGV0YWlsOjpzcF9jb3VudGVkX2Jhc2UgY29uc3QgKj4oaS0+Zmlyc3QpOwotCi0gICAgICAgICAgICBCT09TVF9BU1NFUlQocC0+dXNlX2NvdW50KCkgIT0gMCk7IC8vIHRoZXJlIHNob3VsZCBiZSBubyBpbmFjdGl2ZSBjb3VudHMgaW4gdGhlIG1hcAotCi0gICAgICAgICAgICBtMlsgaS0+Zmlyc3QgXTsKLQotICAgICAgICAgICAgc2Nhbl9hbmRfY291bnQoaS0+c2Vjb25kLmZpcnN0LCBpLT5zZWNvbmQuc2Vjb25kLCBtLCBtMik7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OmNvdXQgPDwgIi4uLiAiIDw8IG0yLnNpemUoKSA8PCAiIG9iamVjdHMgaW4gbTIuXG4iOwotICAgIH0KLQotICAgIC8vIG1hcmsgcmVhY2hhYmxlIG9iamVjdHMKLQotICAgIHsKLSAgICAgICAgb3Blbl90eXBlIG9wZW47Ci0KLSAgICAgICAgZm9yKG1hcDJfdHlwZTo6aXRlcmF0b3IgaSA9IG0yLmJlZ2luKCk7IGkgIT0gbTIuZW5kKCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgbmRuYm9vc3Q6OmRldGFpbDo6c3BfY291bnRlZF9iYXNlIGNvbnN0ICogcCA9IHN0YXRpY19jYXN0PG5kbmJvb3N0OjpkZXRhaWw6OnNwX2NvdW50ZWRfYmFzZSBjb25zdCAqPihpLT5maXJzdCk7Ci0gICAgICAgICAgICBpZihwLT51c2VfY291bnQoKSAhPSBpLT5zZWNvbmQpIG9wZW4ucHVzaF9iYWNrKHApOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjpjb3V0IDw8ICIuLi4gIiA8PCBvcGVuLnNpemUoKSA8PCAiIG9iamVjdHMgaW4gb3Blbi5cbiI7Ci0KLSAgICAgICAgZm9yKG9wZW5fdHlwZTo6aXRlcmF0b3IgaiA9IG9wZW4uYmVnaW4oKTsgaiAhPSBvcGVuLmVuZCgpOyArK2opCi0gICAgICAgIHsKLSAgICAgICAgICAgIG0yLmVyYXNlKCpqKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlKCFvcGVuLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgY29uc3QgKiBwID0gb3Blbi5mcm9udCgpOwotICAgICAgICAgICAgb3Blbi5wb3BfZnJvbnQoKTsKLQotICAgICAgICAgICAgbWFwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtLmZpbmQocCk7Ci0gICAgICAgICAgICBCT09TVF9BU1NFUlQoaSAhPSBtLmVuZCgpKTsKLQotICAgICAgICAgICAgc2Nhbl9hbmRfbWFyayhpLT5zZWNvbmQuZmlyc3QsIGktPnNlY29uZC5zZWNvbmQsIG0yLCBvcGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIG0yIG5vdyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cwotfQotCi1zdGQ6OnNpemVfdCBmaW5kX3VucmVhY2hhYmxlX29iamVjdHMoYm9vbCByZXBvcnQpCi17Ci0gICAgbWFwMl90eXBlIG0yOwotCi0jaWZkZWYgQk9PU1RfSEFTX1RIUkVBRFMKLQotICAgIC8vIFRoaXMgd2lsbCB3b3JrIHdpdGhvdXQgdGhlICNpZmRlZiwgYnV0IHNvbWUgY29tcGlsZXJzIHdhcm4KLSAgICAvLyB0aGF0IGxvY2sgaXMgbm90IHJlZmVyZW5jZWQKLQotICAgIG11dGV4X3R5cGU6OnNjb3BlZF9sb2NrIGxvY2soZ2V0X211dGV4KCkpOwotCi0jZW5kaWYKLQotICAgIG1hcF90eXBlIGNvbnN0ICYgbSA9IGdldF9tYXAoKTsKLQotICAgIGZpbmRfdW5yZWFjaGFibGVfb2JqZWN0c19pbXBsKG0sIG0yKTsKLQotICAgIGlmKHJlcG9ydCkKLSAgICB7Ci0gICAgICAgIGZvcihtYXAyX3R5cGU6Oml0ZXJhdG9yIGogPSBtMi5iZWdpbigpOyBqICE9IG0yLmVuZCgpOyArK2opCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1hcF90eXBlOjpjb25zdF9pdGVyYXRvciBpID0gbS5maW5kKGotPmZpcnN0KTsKLSAgICAgICAgICAgIEJPT1NUX0FTU0VSVChpICE9IG0uZW5kKCkpOwotICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJVbnJlYWNoYWJsZSBvYmplY3QgYXQgIiA8PCBpLT5zZWNvbmQuZmlyc3QgPDwgIiwgIiA8PCBpLT5zZWNvbmQuc2Vjb25kIDw8ICIgYnl0ZXMgbG9uZy5cbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbTIuc2l6ZSgpOwotfQotCi10eXBlZGVmIHN0ZDo6ZGVxdWU8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPFg+ID4gZnJlZV9saXN0X3R5cGU7Ci0KLXN0YXRpYyB2b2lkIHNjYW5fYW5kX2ZyZWUodm9pZCAqIGFyZWEsIHNpemVfdCBzaXplLCBtYXAyX3R5cGUgY29uc3QgJiBtMiwgZnJlZV9saXN0X3R5cGUgJiBmcmVlKQotewotICAgIHVuc2lnbmVkIGNoYXIgKiBwID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihhcmVhKTsKLQotICAgIGZvcihzaXplX3QgbiA9IDA7IG4gKyBzaXplb2Yoc2hhcmVkX3B0cl9sYXlvdXQpIDw9IHNpemU7IHAgKz0gcG9pbnRlcl9hbGlnbiwgbiArPSBwb2ludGVyX2FsaWduKQotICAgIHsKLSAgICAgICAgc2hhcmVkX3B0cl9sYXlvdXQgKiBxID0gcmVpbnRlcnByZXRfY2FzdDxzaGFyZWRfcHRyX2xheW91dCAqPihwKTsKLQotICAgICAgICBpZihxLT5wbi5pZCA9PSBuZG5ib29zdDo6ZGV0YWlsOjpzaGFyZWRfY291bnRfaWQgJiYgcS0+cG4ucGkgIT0gMCAmJiBtMi5jb3VudChxLT5wbi5waSkgIT0gMCAmJiBxLT5weCAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZG5ib29zdDo6c2hhcmVkX3B0cjxYPiAqIHBweCA9IHJlaW50ZXJwcmV0X2Nhc3Q8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPFg+ICogPihwKTsKLSAgICAgICAgICAgIGZyZWUucHVzaF9iYWNrKCpwcHgpOwotICAgICAgICAgICAgcHB4LT5yZXNldCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIGZyZWVfdW5yZWFjaGFibGVfb2JqZWN0cygpCi17Ci0gICAgZnJlZV9saXN0X3R5cGUgZnJlZTsKLQotICAgIHsKLSAgICAgICAgbWFwMl90eXBlIG0yOwotCi0jaWZkZWYgQk9PU1RfSEFTX1RIUkVBRFMKLQotICAgICAgICBtdXRleF90eXBlOjpzY29wZWRfbG9jayBsb2NrKGdldF9tdXRleCgpKTsKLQotI2VuZGlmCi0KLSAgICAgICAgbWFwX3R5cGUgY29uc3QgJiBtID0gZ2V0X21hcCgpOwotCi0gICAgICAgIGZpbmRfdW5yZWFjaGFibGVfb2JqZWN0c19pbXBsKG0sIG0yKTsKLQotICAgICAgICBmb3IobWFwMl90eXBlOjppdGVyYXRvciBqID0gbTIuYmVnaW4oKTsgaiAhPSBtMi5lbmQoKTsgKytqKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG0uZmluZChqLT5maXJzdCk7Ci0gICAgICAgICAgICBCT09TVF9BU1NFUlQoaSAhPSBtLmVuZCgpKTsKLSAgICAgICAgICAgIHNjYW5fYW5kX2ZyZWUoaS0+c2Vjb25kLmZpcnN0LCBpLT5zZWNvbmQuc2Vjb25kLCBtMiwgZnJlZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6OmNvdXQgPDwgIi4uLiBhYm91dCB0byBmcmVlICIgPDwgZnJlZS5zaXplKCkgPDwgIiBvYmplY3RzLlxuIjsKLX0KLQotLy8gZGVidWcgaG9va3MKLQotbmFtZXNwYWNlIG5kbmJvb3N0Ci17Ci0KLXZvaWQgc3Bfc2NhbGFyX2NvbnN0cnVjdG9yX2hvb2sodm9pZCAqKQotewotfQotCi12b2lkIHNwX3NjYWxhcl9jb25zdHJ1Y3Rvcl9ob29rKHZvaWQgKiBweCwgc3RkOjpzaXplX3Qgc2l6ZSwgdm9pZCAqIHBuKQotewotI2lmZGVmIEJPT1NUX0hBU19USFJFQURTCi0KLSAgICBtdXRleF90eXBlOjpzY29wZWRfbG9jayBsb2NrKGdldF9tdXRleCgpKTsKLQotI2VuZGlmCi0KLSAgICBnZXRfbWFwKClbcG5dID0gc3RkOjptYWtlX3BhaXIocHgsIHNpemUpOwotfQotCi12b2lkIHNwX3NjYWxhcl9kZXN0cnVjdG9yX2hvb2sodm9pZCAqKQotewotfQotCi12b2lkIHNwX3NjYWxhcl9kZXN0cnVjdG9yX2hvb2sodm9pZCAqLCBzdGQ6OnNpemVfdCwgdm9pZCAqIHBuKQotewotI2lmZGVmIEJPT1NUX0hBU19USFJFQURTCi0KLSAgICBtdXRleF90eXBlOjpzY29wZWRfbG9jayBsb2NrKGdldF9tdXRleCgpKTsKLQotI2VuZGlmCi0KLSAgICBnZXRfbWFwKCkuZXJhc2UocG4pOwotfQotCi12b2lkIHNwX2FycmF5X2NvbnN0cnVjdG9yX2hvb2sodm9pZCAqKQotewotfQotCi12b2lkIHNwX2FycmF5X2Rlc3RydWN0b3JfaG9vayh2b2lkICopCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIG5kbmJvb3N0Ci0KLSNlbmRpZiAvLyBkZWZpbmVkKEJPT1NUX1NQX0VOQUJMRV9ERUJVR19IT09LUykKZGlmZiAtLWdpdCBhL2xpYnMvc21hcnRfcHRyL3NyYy9zcF9kZWJ1Z19ob29rcy5jcHAgYi9saWJzL3NtYXJ0X3B0ci9zcmMvc3BfZGVidWdfaG9va3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjdjYzhjLi4wMDAwMDAwCi0tLSBhL2xpYnMvc21hcnRfcHRyL3NyYy9zcF9kZWJ1Z19ob29rcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLy8KLS8vICBzcF9kZWJ1Z19ob29rcy5jcHAKLS8vCi0vLyAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIFBldGVyIERpbW92Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLQotI2lmIGRlZmluZWQoQk9PU1RfU1BfRU5BQkxFX0RFQlVHX0hPT0tTKQotCi0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxuZXc+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQotaW50IGNvbnN0IG0gPSAyOyAvLyBtICogc2l6ZW9mKGludCkgbXVzdCBiZSBhbGlnbmVkIGFwcHJvcHJpYXRlbHkKLQotLy8gbWFnaWMgdmFsdWVzIHRvIG1hcmsgaGVhcCBibG9ja3Mgd2l0aAotCi1pbnQgY29uc3QgYWxsb2NhdGVkX3NjYWxhciAgPSAweDEyMzQ1NjBDOwotaW50IGNvbnN0IGFsbG9jYXRlZF9hcnJheSAgID0gMHgxMjM0NTYwQTsKLWludCBjb25zdCBhZG9wdGVkX3NjYWxhciAgICA9IDB4MDU2Nzg5MEM7Ci1pbnQgY29uc3QgYWRvcHRlZF9hcnJheSAgICAgPSAweDA1Njc4OTBBOwotaW50IGNvbnN0IGRlbGV0ZWQgICAgICAgICAgID0gMHg0OTg3NjlERTsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsgLy8gZm9yIGNvbXBpbGVycyB3aGVyZSB0aGluZ3MgYXJlbid0IGluIHN0ZAotCi0vLyBvcGVyYXRvciBuZXcKLQotc3RhdGljIG5ld19oYW5kbGVyIGdldF9uZXdfaGFuZGxlcigpCi17Ci0gICAgbmV3X2hhbmRsZXIgcCA9IHNldF9uZXdfaGFuZGxlcigwKTsKLSAgICBzZXRfbmV3X2hhbmRsZXIocCk7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyB2b2lkICogYWxsb2NhdGUoc2l6ZV90IG4sIGludCBtYXJrKQotewotICAgIGludCAqIHBtOwotCi0gICAgZm9yKDs7KQotICAgIHsKLSAgICAgICAgcG0gPSBzdGF0aWNfY2FzdDxpbnQqPihtYWxsb2MobiArIG0gKiBzaXplb2YoaW50KSkpOwotCi0gICAgICAgIGlmKHBtICE9IDApIGJyZWFrOwotCi0gICAgICAgIGlmKG5ld19oYW5kbGVyIHBuaCA9IGdldF9uZXdfaGFuZGxlcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBwbmgoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKnBtID0gbWFyazsKLQotICAgIHJldHVybiBwbSArIG07Ci19Ci0KLXZvaWQgKiBvcGVyYXRvciBuZXcoc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYykKLXsKLSAgICB2b2lkICogcCA9IGFsbG9jYXRlKG4sIGFsbG9jYXRlZF9zY2FsYXIpOwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fRVhDRVBUSU9OUykKLQotICAgIGlmKHAgPT0gMCkgdGhyb3cgYmFkX2FsbG9jKCk7Ci0KLSNlbmRpZgotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLSNpZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPiAweDU1MSkKLQotdm9pZCAqIG9wZXJhdG9yIG5ldyhzaXplX3Qgbiwgbm90aHJvd190IGNvbnN0ICYpIHRocm93KCkKLXsKLSAgICByZXR1cm4gYWxsb2NhdGUobiwgYWxsb2NhdGVkX3NjYWxhcik7Ci19Ci0KLSNlbmRpZgotCi12b2lkICogb3BlcmF0b3IgbmV3W10oc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYykKLXsKLSAgICB2b2lkICogcCA9IGFsbG9jYXRlKG4sIGFsbG9jYXRlZF9hcnJheSk7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19FWENFUFRJT05TKQotCi0gICAgaWYocCA9PSAwKSB0aHJvdyBiYWRfYWxsb2MoKTsKLQotI2VuZGlmCi0KLSAgICByZXR1cm4gcDsKLX0KLQotI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+IDB4NTUxKQotCi12b2lkICogb3BlcmF0b3IgbmV3W10oc2l6ZV90IG4sIG5vdGhyb3dfdCBjb25zdCAmKSB0aHJvdygpCi17Ci0gICAgcmV0dXJuIGFsbG9jYXRlKG4sIGFsbG9jYXRlZF9hcnJheSk7Ci19Ci0KLSNlbmRpZgotCi0vLyBkZWJ1ZyBob29rcwotCi1uYW1lc3BhY2UgbmRuYm9vc3QKLXsKLQotdm9pZCBzcF9zY2FsYXJfY29uc3RydWN0b3JfaG9vayh2b2lkICogcCkKLXsKLSAgICBpZihwID09IDApIHJldHVybjsKLQotICAgIGludCAqIHBtID0gc3RhdGljX2Nhc3Q8aW50Kj4ocCk7Ci0gICAgcG0gLT0gbTsKLQotICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gYWRvcHRlZF9zY2FsYXIpOyAgICAvLyBzZWNvbmQgc21hcnQgcG9pbnRlciB0byB0aGUgc2FtZSBhZGRyZXNzCi0gICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBhbGxvY2F0ZWRfYXJyYXkpOyAgIC8vIGFsbG9jYXRlZCB3aXRoIG5ld1tdCi0gICAgQk9PU1RfQVNTRVJUKCpwbSA9PSBhbGxvY2F0ZWRfc2NhbGFyKTsgIC8vIG5vdCBhbGxvY2F0ZWQgd2l0aCBuZXcKLQotICAgICpwbSA9IGFkb3B0ZWRfc2NhbGFyOwotfQotCi12b2lkIHNwX3NjYWxhcl9jb25zdHJ1Y3Rvcl9ob29rKHZvaWQgKiBweCwgc3RkOjpzaXplX3QsIHZvaWQgKikKLXsKLSAgICBzcF9zY2FsYXJfY29uc3RydWN0b3JfaG9vayhweCk7Ci19Ci0KLXZvaWQgc3Bfc2NhbGFyX2Rlc3RydWN0b3JfaG9vayh2b2lkICogcCkKLXsKLSAgICBpZihwID09IDApIHJldHVybjsKLQotICAgIGludCAqIHBtID0gc3RhdGljX2Nhc3Q8aW50Kj4ocCk7Ci0gICAgcG0gLT0gbTsKLQotICAgIEJPT1NUX0FTU0VSVCgqcG0gPT0gYWRvcHRlZF9zY2FsYXIpOyAgICAvLyBhdHRlbXB0IHRvIGRlc3Ryb3kgbm9ubWFuYWdlZCBibG9jawotCi0gICAgKnBtID0gYWxsb2NhdGVkX3NjYWxhcjsKLX0KLQotdm9pZCBzcF9zY2FsYXJfZGVzdHJ1Y3Rvcl9ob29rKHZvaWQgKiBweCwgc3RkOjpzaXplX3QsIHZvaWQgKikKLXsKLSAgICBzcF9zY2FsYXJfZGVzdHJ1Y3Rvcl9ob29rKHB4KTsKLX0KLQotLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhbmRsZSB0aGUgYXJyYXkgaG9va3MgaW4gYSBwb3J0YWJsZSBtYW5uZXIuCi0vLyBUaGUgaW1wbGVtZW50YXRpb24gdHlwaWNhbGx5IHJlc2VydmVzIGEgYml0IG9mIHN0b3JhZ2UgZm9yIHRoZSBudW1iZXIKLS8vIG9mIG9iamVjdHMgaW4gdGhlIGFycmF5LCBhbmQgdGhlIGFyZ3VtZW50IG9mIHRoZSBhcnJheSBob29rIGlzbid0Ci0vLyBlcXVhbCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIG9wZXJhdG9yIG5ld1tdLgotCi12b2lkIHNwX2FycmF5X2NvbnN0cnVjdG9yX2hvb2sodm9pZCAqIC8qIHAgKi8pCi17Ci0vKgotICAgIGlmKHAgPT0gMCkgcmV0dXJuOwotCi0gICAgLy8gYWRqdXN0IHAgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0gICAgaW50ICogcG0gPSBzdGF0aWNfY2FzdDxpbnQqPihwKTsKLSAgICBwbSAtPSBtOwotCi0gICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBhZG9wdGVkX2FycmF5KTsgICAgIC8vIHNlY29uZCBzbWFydCBhcnJheSBwb2ludGVyIHRvIHRoZSBzYW1lIGFkZHJlc3MKLSAgICBCT09TVF9BU1NFUlQoKnBtICE9IGFsbG9jYXRlZF9zY2FsYXIpOyAgLy8gYWxsb2NhdGVkIHdpdGggbmV3Ci0gICAgQk9PU1RfQVNTRVJUKCpwbSA9PSBhbGxvY2F0ZWRfYXJyYXkpOyAgIC8vIG5vdCBhbGxvY2F0ZWQgd2l0aCBuZXdbXQotCi0gICAgKnBtID0gYWRvcHRlZF9hcnJheTsKLSovCi19Ci0KLXZvaWQgc3BfYXJyYXlfZGVzdHJ1Y3Rvcl9ob29rKHZvaWQgKiAvKiBwICovKQotewotLyoKLSAgICBpZihwID09IDApIHJldHVybjsKLQotICAgIC8vIGFkanVzdCBwIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24KLQotICAgIGludCAqIHBtID0gc3RhdGljX2Nhc3Q8aW50Kj4ocCk7Ci0gICAgcG0gLT0gbTsKLQotICAgIEJPT1NUX0FTU0VSVCgqcG0gPT0gYWRvcHRlZF9hcnJheSk7IC8vIGF0dGVtcHQgdG8gZGVzdHJveSBub25tYW5hZ2VkIGJsb2NrCi0KLSAgICAqcG0gPSBhbGxvY2F0ZWRfYXJyYXk7Ci0qLwotfQotCi19IC8vIG5hbWVzcGFjZSBuZG5ib29zdAotCi0vLyBvcGVyYXRvciBkZWxldGUKLQotdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqIHApIHRocm93KCkKLXsKLSAgICBpZihwID09IDApIHJldHVybjsKLQotICAgIGludCAqIHBtID0gc3RhdGljX2Nhc3Q8aW50Kj4ocCk7Ci0gICAgcG0gLT0gbTsKLQotICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gZGVsZXRlZCk7ICAgICAgICAgICAvLyBkb3VibGUgZGVsZXRlCi0gICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBhZG9wdGVkX3NjYWxhcik7ICAgIC8vIGRlbGV0ZSBwLmdldCgpOwotICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gYWxsb2NhdGVkX2FycmF5KTsgICAvLyBhbGxvY2F0ZWQgd2l0aCBuZXdbXQotICAgIEJPT1NUX0FTU0VSVCgqcG0gPT0gYWxsb2NhdGVkX3NjYWxhcik7ICAvLyBub3QgYWxsb2NhdGVkIHdpdGggbmV3Ci0KLSAgICAqcG0gPSBkZWxldGVkOwotCi0gICAgZnJlZShwbSk7Ci19Ci0KLSNpZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPiAweDU1MSkKLQotdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqIHAsIG5vdGhyb3dfdCBjb25zdCAmKSB0aHJvdygpCi17Ci0gICAgOjpvcGVyYXRvciBkZWxldGUocCk7Ci19Ci0KLSNlbmRpZgotCi12b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiBwKSB0aHJvdygpCi17Ci0gICAgaWYocCA9PSAwKSByZXR1cm47Ci0KLSAgICBpbnQgKiBwbSA9IHN0YXRpY19jYXN0PGludCo+KHApOwotICAgIHBtIC09IG07Ci0KLSAgICBCT09TVF9BU1NFUlQoKnBtICE9IGRlbGV0ZWQpOyAgICAgICAgICAgLy8gZG91YmxlIGRlbGV0ZQotICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gYWRvcHRlZF9zY2FsYXIpOyAgICAvLyBkZWxldGUgcC5nZXQoKTsKLSAgICBCT09TVF9BU1NFUlQoKnBtICE9IGFsbG9jYXRlZF9zY2FsYXIpOyAgLy8gYWxsb2NhdGVkIHdpdGggbmV3Ci0gICAgQk9PU1RfQVNTRVJUKCpwbSA9PSBhbGxvY2F0ZWRfYXJyYXkpOyAgIC8vIG5vdCBhbGxvY2F0ZWQgd2l0aCBuZXdbXQotCi0gICAgKnBtID0gZGVsZXRlZDsKLQotICAgIGZyZWUocG0pOwotfQotCi0jaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID4gMHg1NTEpCi0KLXZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqIHAsIG5vdGhyb3dfdCBjb25zdCAmKSB0aHJvdygpCi17Ci0gICAgOjpvcGVyYXRvciBkZWxldGVbXShwKTsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBkZWZpbmVkKEJPT1NUX1NQX0VOQUJMRV9ERUJVR19IT09LUykKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9idWlsZC9KYW1maWxlLnYyIGIvbGlicy90ZXN0L2J1aWxkL0phbWZpbGUudjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZDcxYWMuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L2J1aWxkL0phbWZpbGUudjIKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyAgKEMpIENvcHlyaWdodCBib29zdCAyMDA0LgotIyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLSMgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jCi0jICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0KLXByb2plY3QgYm9vc3QvdGVzdCAKLSAgICA6IHNvdXJjZS1sb2NhdGlvbiAuLi9zcmMKLSAgICA6IHJlcXVpcmVtZW50cyA8bGluaz5zaGFyZWQ6PGRlZmluZT5CT09TVF9URVNUX0RZTl9MSU5LPTEKLSAgICAgICAgICAgICAgICAgICA8dG9vbHNldD5tc3ZjOjxhc3luY2gtZXhjZXB0aW9ucz5vbgotICAgICAgICAgICAgICAgICAgIDx0b29sc2V0PmJvcmxhbmQ6PGN4eGZsYWdzPi13LTgwODAKLSAgICAgICAgICAgICAgICAgICA8dG9vbHNldD5ib3JsYW5kOjxjeHhmbGFncz4tdy04MDAxCi0gICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIFdhcm5pbmcgYWJvdXQgYm9vc3Q6Om5vbmNvcHlhYmxlIG5vdCBiZWluZyBleHBvcnRlZAotICAgICAgICAgICAgICAgICAgIDxsaW5rPnNoYXJlZCw8dG9vbHNldD5tc3ZjOjxjeHhmbGFncz4td2Q0Mjc1Ci0gICAgICAgICAgICAgICAgICAgPHRvb2xzZXQ+bXN2Yzo8Y3h4ZmxhZ3M+LXdkNDY3MQotICAgICAgICAgICAgICAgICAgIDx0b29sc2V0Pm1zdmM6PGN4eGZsYWdzPi13ZDQ2NzMKLSAgICAgICAgICAgICAgICAgICA8d2FybmluZ3M+YWxsCi0gICAgOiB1c2FnZS1yZXF1aXJlbWVudHMKLSAgICAgICAgICAgICAgICAgICA8ZGVmaW5lPkJPT1NUX1RFU1RfTk9fQVVUT19MSU5LPTEKLSAgICAgICAgICAgICAgICAgICAjIERpc2FibGUgV2FybmluZyBhYm91dCBib29zdDo6bm9uY29weWFibGUgbm90IGJlaW5nIGV4cG9ydGVkCi0gICAgICAgICAgICAgICAgICAgPGxpbms+c2hhcmVkLDx0b29sc2V0Pm1zdmM6PGN4eGZsYWdzPi13ZDQyNzUKLSAgICA7Ci0KLVBSR19FWEVDX01PTl9TT1VSQ0VTID0KLSAgZXhlY3V0aW9uX21vbml0b3IKLSAgZGVidWcKLSAgY3BwX21haW4KLSAgOwotCi1URVNUX0VYRUNfTU9OX1NPVVJDRVMgPQotICBjb21waWxlcl9sb2dfZm9ybWF0dGVyCi0gIGRlYnVnCi0gIGV4ZWN1dGlvbl9tb25pdG9yCi0gIGZyYW1ld29yawotICBwbGFpbl9yZXBvcnRfZm9ybWF0dGVyCi0gIHByb2dyZXNzX21vbml0b3IKLSAgcmVzdWx0c19jb2xsZWN0b3IKLSAgcmVzdWx0c19yZXBvcnRlcgotICB0ZXN0X21haW4KLSAgdGVzdF90b29scwotICB1bml0X3Rlc3RfbG9nCi0gIHVuaXRfdGVzdF9tYWluCi0gIHVuaXRfdGVzdF9tb25pdG9yCi0gIHVuaXRfdGVzdF9wYXJhbWV0ZXJzCi0gIHVuaXRfdGVzdF9zdWl0ZQotICB4bWxfbG9nX2Zvcm1hdHRlcgotICB4bWxfcmVwb3J0X2Zvcm1hdHRlcgotICA7Ci0KLVVURl9TT1VSQ0VTID0KLSAgY29tcGlsZXJfbG9nX2Zvcm1hdHRlcgotICBkZWJ1ZwotICBleGNlcHRpb25fc2FmZXR5Ci0gIGV4ZWN1dGlvbl9tb25pdG9yCi0gIGZyYW1ld29yawotICBpbnRlcmFjdGlvbl9iYXNlZAotICBsb2dnZWRfZXhwZWN0YXRpb25zCi0gIHBsYWluX3JlcG9ydF9mb3JtYXR0ZXIKLSAgcHJvZ3Jlc3NfbW9uaXRvcgotICByZXN1bHRzX2NvbGxlY3RvcgotICByZXN1bHRzX3JlcG9ydGVyCi0gIHRlc3RfdG9vbHMKLSAgdW5pdF90ZXN0X2xvZwotICB1bml0X3Rlc3RfbWFpbgotICB1bml0X3Rlc3RfbW9uaXRvcgotICB1bml0X3Rlc3RfcGFyYW1ldGVycwotICB1bml0X3Rlc3Rfc3VpdGUKLSAgeG1sX2xvZ19mb3JtYXR0ZXIKLSAgeG1sX3JlcG9ydF9mb3JtYXR0ZXIKLSAgOwotCi1saWIgbmRuYm9vc3RfcHJnX2V4ZWNfbW9uaXRvciAKLSAgOiAjIHNvdXJjZXMKLSAgICAkKFBSR19FWEVDX01PTl9TT1VSQ0VTKS5jcHAgCi0gIDogIyByZXF1aXJlbWVudHMKLSAgOiAjIGRlZmF1bHQgYnVpbGQKLSAgOiAjIHVzYWdlLXJlcXVpcmVtZW50cwotICAgIDxsaW5rPnNoYXJlZDo8ZGVmaW5lPkJPT1NUX1RFU1RfRFlOX0xJTks9MQotICA7Ci0KLWxpYiBuZG5ib29zdF90ZXN0X2V4ZWNfbW9uaXRvcgotICA6ICMgc291cmNlcwotICAgICQoVEVTVF9FWEVDX01PTl9TT1VSQ0VTKS5jcHAKLSAgOiAjIHJlcXVpcmVtZW50cwotICAgIDxsaW5rPnN0YXRpYwotICA6ICMgZGVmYXVsdCBidWlsZAotICA6ICMgdXNhZ2UtcmVxdWlyZW1lbnRzCi0gICAgPGxpbms+c2hhcmVkOjxkZWZpbmU+Qk9PU1RfVEVTVF9EWU5fTElOSz0xCi0gIDsKLQotbGliIG5kbmJvb3N0X3VuaXRfdGVzdF9mcmFtZXdvcmsKLSAgOiAjIHNvdXJjZXMKLSAgICAkKFVURl9TT1VSQ0VTKS5jcHAKLSAgOiAjIHJlcXVpcmVtZW50cwotICA6ICMgZGVmYXVsdCBidWlsZAotICA6ICMgdXNhZ2UtcmVxdWlyZW1lbnRzCi0gICAgPGxpbms+c2hhcmVkOjxkZWZpbmU+Qk9PU1RfVEVTVF9EWU5fTElOSz0xCi0gIDsKLQotYWxpYXMgbWluaW1hbCA6IDogOiA6Ci0gICAgICAgICAgICAgICAgICAgPHRvb2xzZXQ+bXN2Yzo8YXN5bmNoLWV4Y2VwdGlvbnM+b24KLSAgICAgICA7Ci0KLWFsaWFzIGluY2x1ZGVkIDogOiA6IDoKLSAgICAgICAgICAgICAgICAgICA8dG9vbHNldD5tc3ZjOjxhc3luY2gtZXhjZXB0aW9ucz5vbgotICAgICAgIDsKLQotYm9vc3QtaW5zdGFsbCBuZG5ib29zdF9wcmdfZXhlY19tb25pdG9yIAotICAgICAgICAgICAgICBuZG5ib29zdF90ZXN0X2V4ZWNfbW9uaXRvcgotICAgICAgICAgICAgICBuZG5ib29zdF91bml0X3Rlc3RfZnJhbWV3b3JrIDsKLSAgICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL2NvbXBpbGVyX2xvZ19mb3JtYXR0ZXIuY3BwIGIvbGlicy90ZXN0L3NyYy9jb21waWxlcl9sb2dfZm9ybWF0dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxYzZkYS4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL2NvbXBpbGVyX2xvZ19mb3JtYXR0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvY29tcGlsZXJfbG9nX2Zvcm1hdHRlci5pcHA+Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9jcHBfbWFpbi5jcHAgYi9saWJzL3Rlc3Qvc3JjL2NwcF9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiN2Q3Ny4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL2NwcF9tYWluLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0vLwotLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCi0vLwotLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCi0vLwotLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL2NwcF9tYWluLmlwcD4KLQotLy8gRU9GCi0KZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvZGVidWcuY3BwIGIvbGlicy90ZXN0L3NyYy9kZWJ1Zy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTZmM2UuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy9kZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA2LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC9kZWJ1Zy5pcHA+Ci0KLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gIFJldmlzaW9uIEhpc3RvcnkgOgotLy8gIAotLy8gICRMb2ckCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL2V4Y2VwdGlvbl9zYWZldHkuY3BwIGIvbGlicy90ZXN0L3NyYy9leGNlcHRpb25fc2FmZXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFlYzU1Yi4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL2V4Y2VwdGlvbl9zYWZldHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvZXhjZXB0aW9uX3NhZmV0eS5pcHA+Ci0KLS8vIEVPRgotCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL2V4ZWN1dGlvbl9tb25pdG9yLmNwcCBiL2xpYnMvdGVzdC9zcmMvZXhlY3V0aW9uX21vbml0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjEwZWE1Li4wMDAwMDAwCi0tLSBhL2xpYnMvdGVzdC9zcmMvZXhlY3V0aW9uX21vbml0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwPgotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvZnJhbWV3b3JrLmNwcCBiL2xpYnMvdGVzdC9zcmMvZnJhbWV3b3JrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmYmQxZS4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL2ZyYW1ld29yay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC9mcmFtZXdvcmsuaXBwPgotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvaW50ZXJhY3Rpb25fYmFzZWQuY3BwIGIvbGlicy90ZXN0L3NyYy9pbnRlcmFjdGlvbl9iYXNlZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YjlkODYuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy9pbnRlcmFjdGlvbl9iYXNlZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC9pbnRlcmFjdGlvbl9iYXNlZC5pcHA+Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9sb2dnZWRfZXhwZWN0YXRpb25zLmNwcCBiL2xpYnMvdGVzdC9zcmMvbG9nZ2VkX2V4cGVjdGF0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMmFiNTMuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy9sb2dnZWRfZXhwZWN0YXRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0vLwotLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCi0vLwotLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCi0vLwotLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL2xvZ2dlZF9leHBlY3RhdGlvbnMuaXBwPgotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvcGxhaW5fcmVwb3J0X2Zvcm1hdHRlci5jcHAgYi9saWJzL3Rlc3Qvc3JjL3BsYWluX3JlcG9ydF9mb3JtYXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjU2OTZkLi4wMDAwMDAwCi0tLSBhL2xpYnMvdGVzdC9zcmMvcGxhaW5fcmVwb3J0X2Zvcm1hdHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC9wbGFpbl9yZXBvcnRfZm9ybWF0dGVyLmlwcD4KLQotLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3Byb2dyZXNzX21vbml0b3IuY3BwIGIvbGlicy90ZXN0L3NyYy9wcm9ncmVzc19tb25pdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3N2Y0NS4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL3Byb2dyZXNzX21vbml0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvcHJvZ3Jlc3NfbW9uaXRvci5pcHA+Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9yZXN1bHRzX2NvbGxlY3Rvci5jcHAgYi9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfY29sbGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRmOGQyMS4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfY29sbGVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0vLwotLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCi0vLwotLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCi0vLwotLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3Jlc3VsdHNfY29sbGVjdG9yLmlwcD4KLQotLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfcmVwb3J0ZXIuY3BwIGIvbGlicy90ZXN0L3NyYy9yZXN1bHRzX3JlcG9ydGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4NDhjNC4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfcmVwb3J0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvcmVzdWx0c19yZXBvcnRlci5pcHA+Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy90ZXN0X21haW4uY3BwIGIvbGlicy90ZXN0L3NyYy90ZXN0X21haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWZmZmJmLi4wMDAwMDAwCi0tLSBhL2xpYnMvdGVzdC9zcmMvdGVzdF9tYWluLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0vLwotLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCi0vLwotLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCi0vLwotLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3Rlc3RfbWFpbi5pcHA+Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy90ZXN0X3Rvb2xzLmNwcCBiL2xpYnMvdGVzdC9zcmMvdGVzdF90b29scy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTRmYTUuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy90ZXN0X3Rvb2xzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0vLwotLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCi0vLwotLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCi0vLwotLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3Rlc3RfdG9vbHMuaXBwPgotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X2xvZy5jcHAgYi9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9sb2cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjIwMTdlLi4wMDAwMDAwCi0tLSBhL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X2xvZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC91bml0X3Rlc3RfbG9nLmlwcD4KLQotLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9tYWluLmNwcCBiL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X21haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGZjMTBhLi4wMDAwMDAwCi0tLSBhL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X21haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvdW5pdF90ZXN0X21haW4uaXBwPgotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X21vbml0b3IuY3BwIGIvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfbW9uaXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMzAxNmIuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfbW9uaXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC91bml0X3Rlc3RfbW9uaXRvci5pcHA+Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfcGFyYW1ldGVycy5jcHAgYi9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9wYXJhbWV0ZXJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3MjU4ZS4uMDAwMDAwMAotLS0gYS9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9wYXJhbWV0ZXJzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCi0vLwotLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCi0vLwotLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCi0vLwotLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCi0jaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3VuaXRfdGVzdF9wYXJhbWV0ZXJzLmlwcD4KLQotLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9zdWl0ZS5jcHAgYi9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9zdWl0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDgwODUuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy91bml0X3Rlc3Rfc3VpdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvdW5pdF90ZXN0X3N1aXRlLmlwcD4KLQotLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3htbF9sb2dfZm9ybWF0dGVyLmNwcCBiL2xpYnMvdGVzdC9zcmMveG1sX2xvZ19mb3JtYXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTIxNjcwLi4wMDAwMDAwCi0tLSBhL2xpYnMvdGVzdC9zcmMveG1sX2xvZ19mb3JtYXR0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KLS8vCi0vLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKLS8vCi0vLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKLS8vCi0vLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKLSNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwveG1sX2xvZ19mb3JtYXR0ZXIuaXBwPgotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMveG1sX3JlcG9ydF9mb3JtYXR0ZXIuY3BwIGIvbGlicy90ZXN0L3NyYy94bWxfcmVwb3J0X2Zvcm1hdHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNzA2YWQuLjAwMDAwMDAKLS0tIGEvbGlicy90ZXN0L3NyYy94bWxfcmVwb3J0X2Zvcm1hdHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgotLy8KLS8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAotLy8KLS8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAotLy8KLS8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQotI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC94bWxfcmVwb3J0X2Zvcm1hdHRlci5pcHA+Ci0KLS8vIEVPRgo=