ZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZWUxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyCkBAIC0wLDAgKzEsMTYgQEAKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgorICAKKyMgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisjICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorIyAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKK3Byb2plY3QgYm9vc3QvZG9jIDsKK2ltcG9ydCBib29zdGJvb2sgOiBib29zdGJvb2sgOworCitib29zdGJvb2sgZnVuY3Rpb24tZG9jIAorICAgIDogCisgICAgZnVuY3Rpb24ueG1sIAorICAgIDoKKyAgICAgICAgPHhzbDpwYXJhbT5ib29zdC5yb290PS4uLy4uLy4uLy4uCisgICAgICAgIDxmb3JtYXQ+cGRmOjx4c2w6cGFyYW0+Ym9vc3QudXJsLnByZWZpeD1odHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy9yZWxlYXNlL2RvYy9odG1sCisgICAgOworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL2RvYy9mYXEueG1sIGIvbGlicy9mdW5jdGlvbi9kb2MvZmFxLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWM1OTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9kb2MvZmFxLnhtbApAQCAtMCwwICsxLDE2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgIENvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIEdyZWdvciA8ZG91Zy5ncmVnb3IgLWF0LSBnbWFpbC5jb20+CisgIAorICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICAtLT4KKzwhRE9DVFlQRSBsaWJyYXJ5IFBVQkxJQyAiLS8vQm9vc3QvL0RURCBCb29zdEJvb2sgWE1MIFYxLjAvL0VOIgorICAiaHR0cDovL3d3dy5ib29zdC5vcmcvdG9vbHMvYm9vc3Rib29rL2R0ZC9ib29zdGJvb2suZHRkIj4KKzxzZWN0aW9uIGlkPSJmdW5jdGlvbi5mYXEiIGxhc3QtcmV2aXNpb249IiREYXRlOiAyMDA2LTExLTAzIDExOjQxOjEwIC0wODAwIChGcmksIDAzIE5vdiAyMDA2KSAkIj4KKyAgPHRpdGxlPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC90aXRsZT4KKworPHFhbmRhc2V0PgorICA8cWFuZGFlbnRyeT4KKyAgICA8cXVlc3Rpb24+PHBhcmE+V2h5IGNhbid0IEkgY29tcGFyZQorICAgIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+IG9iamVjdHMgd2l0aAorICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IG9yCisgICAgPGNvZGU+b3BlcmF0b3IhPTwvY29kZT4/PC9wYXJhPjwvcXVlc3Rpb24+CisKKyAgICA8YW5zd2VyPgorICAgICAgPHBhcmE+Q29tcGFyaXNvbiBiZXR3ZWVuIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+CisgICAgICBvYmplY3RzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCAid2VsbCIsIGFuZCB0aGVyZWZvcmUgd2lsbCBub3QgYmUKKyAgICAgIGltcGxlbWVudGVkLiBUaGUgdHlwaWNhbCBzZW1hbnRpY3MgcmVxdWVzdGVkIGZvciA8Y29kZT5mID09CisgICAgICBnPC9jb2RlPiBnaXZlbiA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiBvYmplY3RzCisgICAgICA8Y29kZT5mPC9jb2RlPiBhbmQgPGNvZGU+ZzwvY29kZT4gYXJlOjwvcGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+SWYgPGNvZGU+ZjwvY29kZT4gYW5kIDxjb2RlPmc8L2NvZGU+CisgICAgICAgICAgc3RvcmUgZnVuY3Rpb24gb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlLCB1c2UgdGhhdCB0eXBlJ3MKKyAgICAgICAgICA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPiB0byBjb21wYXJlCisgICAgICAgICAgdGhlbS48L3NpbXBhcmE+PC9saXN0aXRlbT4gCisKKyAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+SWYgPGNvZGU+ZjwvY29kZT4gYW5kIDxjb2RlPmc8L2NvZGU+CisgICAgICAgICAgc3RvcmUgZnVuY3Rpb24gb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMsIHJldHVybgorICAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8cGFyYT5UaGUgcHJvYmxlbSBvY2N1cnMgd2hlbiB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0cworICAgICAgc3RvcmVkIGJ5IGJvdGggPGNvZGU+ZjwvY29kZT4gYW5kIDxjb2RlPmc8L2NvZGU+IGRvZXNuJ3QgaGF2ZSBhbgorICAgICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT46IHdlIHdvdWxkIGxpa2UgdGhlIGV4cHJlc3Npb24gPGNvZGU+ZiA9PQorICAgICAgZzwvY29kZT4gdG8gZmFpbCB0byBjb21waWxlLCBhcyBvY2N1cnMgd2l0aCwgZS5nLiwgdGhlIHN0YW5kYXJkCisgICAgICBjb250YWluZXJzLiBIb3dldmVyLCB0aGlzIGlzIG5vdCBpbXBsZW1lbnRhYmxlIGZvcgorICAgICAgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4gYmVjYXVzZSBpdCBuZWNlc3NhcmlseQorICAgICAgImVyYXNlcyIgc29tZSB0eXBlIGluZm9ybWF0aW9uIGFmdGVyIGl0IGhhcyBiZWVuIGFzc2lnbmVkIGEKKyAgICAgIGZ1bmN0aW9uIG9iamVjdCwgc28gaXQgY2Fubm90IHRyeSB0byBjYWxsCisgICAgICA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPiBsYXRlcjogaXQgbXVzdCBlaXRoZXIgZmluZCBhIHdheSB0byBjYWxsCisgICAgICA8Y29kZT5vcGVyYXRvcj09PC9jb2RlPiBub3csIG9yIGl0IHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBjYWxsIGl0CisgICAgICBsYXRlci4gTm90ZSwgZm9yIGluc3RhbmNlLCB3aGF0IGhhcHBlbnMgaWYgeW91IHRyeSB0byBwdXQgYQorICAgICAgPGNvZGU+ZmxvYXQ8L2NvZGU+IHZhbHVlIGludG8gYQorICAgICAgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4gb2JqZWN0OiB5b3Ugd2lsbCBnZXQgYW4KKyAgICAgIGVycm9yIGF0IHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIG9yIGNvbnN0cnVjdG9yLCBub3QgaW4KKyAgICAgIDxjb2RlPm9wZXJhdG9yKCk8L2NvZGU+LCBiZWNhdXNlIHRoZSBmdW5jdGlvbi1jYWxsIGV4cHJlc3Npb24KKyAgICAgIG11c3QgYmUgYm91bmQgaW4gdGhlIGNvbnN0cnVjdG9yIG9yIGFzc2lnbm1lbnQgb3BlcmF0b3IuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgbW9zdCBwcm9taXNpbmcgYXBwcm9hY2ggaXMgdG8gZmluZCBhIG1ldGhvZCBvZgorICAgICAgZGV0ZXJtaW5pbmcgaWYgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gY2FuIGJlIGNhbGxlZCBmb3IgYQorICAgICAgcGFydGljdWxhciB0eXBlLCBhbmQgdGhlbiBzdXBwb3J0aW5nIGl0IG9ubHkgd2hlbiBpdCBpcworICAgICAgYXZhaWxhYmxlOyBpbiBvdGhlciBzaXR1YXRpb25zLCBhbiBleGNlcHRpb24gd291bGQgYmUKKyAgICAgIHRocm93bi4gSG93ZXZlciwgdG8gZGF0ZSB0aGVyZSBpcyBubyBrbm93biB3YXkgdG8gZGV0ZWN0IGlmIGFuCisgICAgICBhcmJpdHJhcnkgb3BlcmF0b3IgZXhwcmVzc2lvbiA8Y29kZT5mID09IGc8L2NvZGU+IGlzIHN1aXRhYmx5CisgICAgICBkZWZpbmVkLiBUaGUgYmVzdCBzb2x1dGlvbiBrbm93biBoYXMgdGhlIGZvbGxvd2luZyB1bmRlc2lyYWJsZQorICAgICAgcXVhbGl0aWVzOjwvcGFyYT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+RmFpbHMgYXQgY29tcGlsZS10aW1lIGZvciBvYmplY3RzIHdoZXJlCisgICAgICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IGlzIG5vdCBhY2Nlc3NpYmxlIChlLmcuLCBiZWNhdXNlIGl0IGlzCisgICAgICAgIDxjb2RlPnByaXZhdGU8L2NvZGU+KS48L3NpbXBhcmE+PC9saXN0aXRlbT4KKworICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+RmFpbHMgYXQgY29tcGlsZS10aW1lIGlmIGNhbGxpbmcKKyAgICAgICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gaXMgYW1iaWd1b3VzLjwvc2ltcGFyYT48L2xpc3RpdGVtPgorCisgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5BcHBlYXJzIHRvIGJlIGNvcnJlY3QgaWYgdGhlCisgICAgICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IGRlY2xhcmF0aW9uIGlzIGNvcnJlY3QsIGV2ZW4gdGhvdWdoCisgICAgICAgIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+IG1heSBub3QgY29tcGlsZS48L3NpbXBhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisKKyAgICAgIDxwYXJhPkFsbCBvZiB0aGVzZSBwcm9ibGVtcyB0cmFuc2xhdGUgaW50byBmYWlsdXJlcyBpbiB0aGUKKyAgICAgIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+IGNvbnN0cnVjdG9ycyBvcgorICAgICAgYXNzaWdubWVudCBvcGVyYXRvciwgPGVtcGhhc2lzPmV2ZW4gaWYgdGhlIHVzZXIgbmV2ZXIgaW52b2tlcworICAgICAgb3BlcmF0b3I9PTwvZW1waGFzaXM+LiBXZSBjYW4ndCBkbyB0aGF0IHRvIHVzZXJzLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIG90aGVyIG9wdGlvbiBpcyB0byBwbGFjZSB0aGUgYnVyZGVuIG9uIHVzZXJzIHRoYXQgd2FudAorICAgICAgdG8gdXNlIDxjb2RlPm9wZXJhdG9yPT08L2NvZGU+LCBlLmcuLCBieSBwcm92aWRpbmcgYW4KKyAgICAgIDxjb2RlPmlzX2VxdWFsaXR5X2NvbXBhcmFibGU8L2NvZGU+IHRyYWl0IHRoZXkgbWF5CisgICAgICBzcGVjaWFsaXplLiBUaGlzIGlzIGEgd29ya2FibGUgc29sdXRpb24sIGJ1dCBpcyBkYW5nZXJvdXMgaW4KKyAgICAgIHByYWN0aWNlLCBiZWNhdXNlIGZvcmdldHRpbmcgdG8gc3BlY2lhbGl6ZSB0aGUgdHJhaXQgd2lsbCByZXN1bHQKKyAgICAgIGluIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBiZWluZyB0aHJvd24gZnJvbQorICAgICAgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4ncworICAgICAgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4uIFRoaXMgZXNzZW50aWFsbHkgbmVnYXRlcyB0aGUgdXNlZnVsbmVzcworICAgICAgb2YgPGNvZGU+b3BlcmF0b3I9PTwvY29kZT4gaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgbW9zdAorICAgICAgZGVzaXJlZDogbXVsdGl0YXJnZXQgY2FsbGJhY2tzLiBUaGUKKyAgICAgIDxsaWJyYXJ5bmFtZT5TaWduYWxzPC9saWJyYXJ5bmFtZT4gbGlicmFyeSBoYXMgYSB3YXkgYXJvdW5kCisgICAgICB0aGlzLjwvcGFyYT4KKyAgICA8L2Fuc3dlcj4KKyAgPC9xYW5kYWVudHJ5PgorCisgIDxxYW5kYWVudHJ5PgorICAgIDxxdWVzdGlvbj48cGFyYT5JIHNlZSB2b2lkIHBvaW50ZXJzOyBpcyB0aGlzIFttZXNzXSB0eXBlIHNhZmU/PC9wYXJhPjwvcXVlc3Rpb24+CisgICAgPGFuc3dlcj4KKzxwYXJhPlllcywgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHR5cGUKK3NhZmUgZXZlbiB0aG91Z2ggaXQgdXNlcyB2b2lkIHBvaW50ZXJzIGFuZCBwb2ludGVycyB0byBmdW5jdGlvbnMKK3JldHVybmluZyB2b2lkIGFuZCB0YWtpbmcgbm8gYXJndW1lbnRzLiBFc3NlbnRpYWxseSwgYWxsIHR5cGUKK2luZm9ybWF0aW9uIGlzIGVuY29kZWQgaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBhbmQgaW52b2tlCitmdW5jdGlvbiBwb2ludGVycyBhbmQgZnVuY3Rpb24gb2JqZWN0cy4gT25seSB0aGVzZSBmdW5jdGlvbnMgYXJlCitpbnN0YW50aWF0ZWQgd2l0aCB0aGUgZXhhY3QgdHlwZSB0aGF0IGlzIHBvaW50ZWQgdG8gYnkgdGhlIHZvaWQKK3BvaW50ZXIgb3IgcG9pbnRlciB0byB2b2lkIGZ1bmN0aW9uLiBUaGUgcmVhc29uIHRoYXQgYm90aCBhcmUgcmVxdWlyZWQKK2lzIHRoYXQgb25lIG1heSBjYXN0IGJldHdlZW4gdm9pZCBwb2ludGVycyBhbmQgb2JqZWN0IHBvaW50ZXJzIHNhZmVseQorb3IgYmV0d2VlbiBkaWZmZXJlbnQgdHlwZXMgb2YgZnVuY3Rpb24gcG9pbnRlcnMgKHByb3ZpZGVkIHlvdSBkb24ndAoraW52b2tlIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoIHRoZSB3cm9uZyB0eXBlKS4gIDwvcGFyYT4KKyAgICA8L2Fuc3dlcj4KKyAgPC9xYW5kYWVudHJ5PgorCisgIDxxYW5kYWVudHJ5PgorICAgIDxxdWVzdGlvbj48cGFyYT5XaHkgYXJlIHRoZXJlIHdvcmthcm91bmRzIGZvciB2b2lkIHJldHVybnM/IEMrKyBhbGxvd3MgdGhlbSE8L3BhcmE+PC9xdWVzdGlvbj4KKyAgICA8YW5zd2VyPjxwYXJhPlZvaWQgcmV0dXJucyBhcmUgcGVybWl0dGVkIGJ5IHRoZSBDKysgc3RhbmRhcmQsIGFzIGluIHRoaXMgY29kZSBzbmlwcGV0OgorPHByb2dyYW1saXN0aW5nPnZvaWQgZigpOwordm9pZCBnKCkgeyByZXR1cm4gZigpOyB9PC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4gVGhpcyBpcyBhIHZhbGlkIHVzYWdlIG9mIDxjb21wdXRlcm91dHB1dD5ib29zdDo6ZnVuY3Rpb248L2NvbXB1dGVyb3V0cHV0PiBiZWNhdXNlIHZvaWQgcmV0dXJucyBhcmUgbm90IHVzZWQuIFdpdGggdm9pZCByZXR1cm5zLCB3ZSB3b3VsZCBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgaWxsLWZvcm1lZCBjb2RlIHNpbWlsYXIgdG86Cis8cHJvZ3JhbWxpc3Rpbmc+aW50IGYoKTsKK3ZvaWQgZygpIHsgcmV0dXJuIGYoKTsgfTwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3BhcmE+CisKKzxwYXJhPiBJbiBlc3NlbmNlLCBub3QgdXNpbmcgdm9pZCByZXR1cm5zIGFsbG93cworPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IHRvIHN3YWxsb3cgYSByZXR1cm4gdmFsdWUuIFRoaXMgaXMKK2NvbnNpc3RlbnQgd2l0aCBhbGxvd2luZyB0aGUgdXNlciB0byBhc3NpZ24gYW5kIGludm9rZSBmdW5jdGlvbnMgYW5kCitmdW5jdGlvbiBvYmplY3RzIHdpdGggcGFyYW1ldGVycyB0aGF0IGRvbid0IGV4YWN0bHkgbWF0Y2guPC9wYXJhPgorCisgICAgPC9hbnN3ZXI+CisgIDwvcWFuZGFlbnRyeT4KKworICA8cWFuZGFlbnRyeT4KKyAgICA8cXVlc3Rpb24+PHBhcmE+V2h5IChmdW5jdGlvbikgY2xvbmluZz88L3BhcmE+PC9xdWVzdGlvbj4KKyAgICA8YW5zd2VyPgorICAgICAgPHBhcmE+SW4gTm92ZW1iZXIgYW5kIERlY2VtYmVyIG9mIDIwMDAsIHRoZSBpc3N1ZSBvZiBjbG9uaW5nCisgICAgICB2cy4gcmVmZXJlbmNlIGNvdW50aW5nIHdhcyBkZWJhdGVkIGF0IGxlbmd0aCBhbmQgaXQgd2FzIGRlY2lkZWQKKyAgICAgIHRoYXQgY2xvbmluZyBnYXZlIG1vcmUgcHJlZGljdGFibGUgc2VtYW50aWNzLiBJIHdvbid0IHJlaGFzaCB0aGUKKyAgICAgIGRpc2N1c3Npb24gaGVyZSwgYnV0IGlmIGl0IGNsb25pbmcgaXMgaW5jb3JyZWN0IGZvciBhIHBhcnRpY3VsYXIKKyAgICAgIGFwcGxpY2F0aW9uIGEgcmVmZXJlbmNlLWNvdW50aW5nIGFsbG9jYXRvciBjb3VsZCBiZSB1c2VkLjwvcGFyYT4KKyAgICA8L2Fuc3dlcj4KKyAgPC9xYW5kYWVudHJ5PgorCisgIDxxYW5kYWVudHJ5PgorICAgIDxxdWVzdGlvbj48cGFyYT5Ib3cgbXVjaCBvdmVyaGVhZCBkb2VzIGEgY2FsbCB0aHJvdWdoIDxjb2RlPjxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+PC9jb2RlPiBpbmN1cj88L3BhcmE+PC9xdWVzdGlvbj4KKyAgICA8YW5zd2VyPgorICAgICAgPHBhcmE+VGhlIGNvc3Qgb2YgPGNvZGU+Ym9vc3Q6OmZ1bmN0aW9uPC9jb2RlPiBjYW4gYmUgcmVhc29uYWJseQorICAgICAgY29uc2lzdGVudGx5IG1lYXN1cmVkIGF0IGFyb3VuZCAyMG5zICsvLSAxMCBucyBvbiBhIG1vZGVybiA+MkdIegorICAgICAgcGxhdGZvcm0gdmVyc3VzIGRpcmVjdGx5IGlubGluaW5nIHRoZSBjb2RlLjwvcGFyYT4KKworICAgICAgPHBhcmE+SG93ZXZlciwgdGhlIHBlcmZvcm1hbmNlIG9mIHlvdXIgYXBwbGljYXRpb24gbWF5IGJlbmVmaXQKKyAgICAgIGZyb20gb3IgYmUgZGlzYWR2YW50YWdlZCBieSA8Y29kZT5ib29zdDo6ZnVuY3Rpb248L2NvZGU+CisgICAgICBkZXBlbmRpbmcgb24gaG93IHlvdXIgQysrIG9wdGltaXNlciBvcHRpbWlzZXMuICBTaW1pbGFyIHRvIGEKKyAgICAgIHN0YW5kYXJkIGZ1bmN0aW9uIHBvaW50ZXIsIGRpZmZlcmVuY2VzIG9mIG9yZGVyIG9mIDEwJSBoYXZlIGJlZW4KKyAgICAgIG5vdGVkIHRvIHRoZSBiZW5lZml0IG9yIGRpc2FkdmFudGFnZSBvZiB1c2luZworICAgICAgPGNvZGU+Ym9vc3Q6OmZ1bmN0aW9uPC9jb2RlPiB0byBjYWxsIGEgZnVuY3Rpb24gdGhhdCBjb250YWlucyBhCisgICAgICB0aWdodCBsb29wIGRlcGVuZGluZyBvbiB5b3VyIGNvbXBpbGF0aW9uIGNpcmN1bXN0YW5jZXMuPC9wYXJhPgorICAgICAKKyAgICAgIDxwYXJhPltBbnN3ZXIgcHJvdmlkZWQgYnkgTWF0dCBIdXJkLiBTZWUgPHVsaW5rIHVybD0iaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAubGliLmJvb3N0LmRldmVsLzMzMjc4Ii8+XTwvcGFyYT4KKyAgICA8L2Fuc3dlcj4KKyAgPC9xYW5kYWVudHJ5PgorPC9xYW5kYXNldD4gCisKKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL2Z1bmN0aW9uLnhtbCBiL2xpYnMvZnVuY3Rpb24vZG9jL2Z1bmN0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2YyOWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9kb2MvZnVuY3Rpb24ueG1sCkBAIC0wLDAgKzEsNjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgbGlicmFyeSBQVUJMSUMgIi0vL0Jvb3N0Ly9EVEQgQm9vc3RCb29rIFhNTCBWMS4wLy9FTiIKKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL3Rvb2xzL2Jvb3N0Ym9vay9kdGQvYm9vc3Rib29rLmR0ZCI+Cis8bGlicmFyeSBuYW1lPSJGdW5jdGlvbiIgZGlybmFtZT0iZnVuY3Rpb24iIGlkPSJmdW5jdGlvbiIgCisgICAgICAgICBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAwNC0wNy0yNCAxOTo1OTozMCAtMDcwMCAoU2F0LCAyNCBKdWwgMjAwNCkgJCIgCisgICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+Cis8bGlicmFyeWluZm8+CisgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5Eb3VnbGFzPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+R3JlZ29yPC9zdXJuYW1lPgorICAgIDxlbWFpbD5kZ3JlZ29yIC1hdC0gY3MuaW5kaWFuYS5lZHU8L2VtYWlsPgorICA8L2F1dGhvcj4KKworICA8Y29weXJpZ2h0PgorICAgIDx5ZWFyPjIwMDE8L3llYXI+CisgICAgPHllYXI+MjAwMjwveWVhcj4KKyAgICA8eWVhcj4yMDAzPC95ZWFyPgorICAgIDx5ZWFyPjIwMDQ8L3llYXI+CisgICAgPGhvbGRlcj5Eb3VnbGFzIEdyZWdvcjwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+VXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdAorICAgIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlCisgICAgPGZpbGVuYW1lPkxJQ0VOU0VfMV8wLnR4dDwvZmlsZW5hbWU+IG9yIGNvcHkgYXQgPHVsaW5rCisgICAgdXJsPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvdWxpbms+KTwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKworICA8bGlicmFyeXB1cnBvc2U+RnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzIGZvciBkZWZlcnJlZCBjYWxscyBvciBjYWxsYmFja3M8L2xpYnJhcnlwdXJwb3NlPgorICA8bGlicmFyeWNhdGVnb3J5IG5hbWU9ImNhdGVnb3J5OmhpZ2hlci1vcmRlciIvPgorPC9saWJyYXJ5aW5mbz4KKworPHRpdGxlPkJvb3N0LkZ1bmN0aW9uPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9ImZ1bmN0aW9uLmludHJvIj4KKzx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPiAKKzxwYXJhPlRoZSBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5IGNvbnRhaW5zIGEgZmFtaWx5IG9mIGNsYXNzIHRlbXBsYXRlcwordGhhdCBhcmUgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzLiBUaGUgbm90aW9uIGlzIHNpbWlsYXIgdG8gYQorZ2VuZXJhbGl6ZWQgY2FsbGJhY2suIEl0IHNoYXJlcyBmZWF0dXJlcyB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzIGluCit0aGF0IGJvdGggZGVmaW5lIGEgY2FsbCBpbnRlcmZhY2UgKGUuZy4sIGEgZnVuY3Rpb24gdGFraW5nIHR3byBpbnRlZ2VyCithcmd1bWVudHMgYW5kIHJldHVybmluZyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlKSB0aHJvdWdoIHdoaWNoIHNvbWUKK2ltcGxlbWVudGF0aW9uIGNhbiBiZSBjYWxsZWQsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBpbnZva2VkCittYXkgY2hhbmdlIHRocm91Z2hvdXQgdGhlIGNvdXJzZSBvZiB0aGUgcHJvZ3JhbS48L3BhcmE+CisKKzxwYXJhPiBHZW5lcmFsbHksIGFueSBwbGFjZSBpbiB3aGljaCBhIGZ1bmN0aW9uIHBvaW50ZXIgd291bGQgYmUgdXNlZAordG8gZGVmZXIgYSBjYWxsIG9yIG1ha2UgYSBjYWxsYmFjaywgQm9vc3QuRnVuY3Rpb24gY2FuIGJlIHVzZWQgaW5zdGVhZAordG8gYWxsb3cgdGhlIHVzZXIgZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCit0YXJnZXQuIFRhcmdldHMgY2FuIGJlIGFueSAnY29tcGF0aWJsZScgZnVuY3Rpb24gb2JqZWN0IChvciBmdW5jdGlvbgorcG9pbnRlciksIG1lYW5pbmcgdGhhdCB0aGUgYXJndW1lbnRzIHRvIHRoZSBpbnRlcmZhY2UgZGVzaWduYXRlZCBieQorQm9vc3QuRnVuY3Rpb24gY2FuIGJlIGNvbnZlcnRlZCB0byB0aGUgYXJndW1lbnRzIG9mIHRoZSB0YXJnZXQKK2Z1bmN0aW9uIG9iamVjdC48L3BhcmE+Cis8L3NlY3Rpb24+CisKKzx4aTppbmNsdWRlIGhyZWY9Imhpc3RvcnkueG1sIi8+Cis8eGk6aW5jbHVkZSBocmVmPSJ0dXRvcmlhbC54bWwiLz4KKzx4aTppbmNsdWRlIGhyZWY9InJlZmVyZW5jZS54bWwiLz4KKzx4aTppbmNsdWRlIGhyZWY9ImZhcS54bWwiLz4KKzx4aTppbmNsdWRlIGhyZWY9Im1pc2MueG1sIi8+Cis8eGk6aW5jbHVkZSBocmVmPSJ0ZXN0cy54bWwiLz4KKworPC9saWJyYXJ5PgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvaGlzdG9yeS54bWwgYi9saWJzL2Z1bmN0aW9uL2RvYy9oaXN0b3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2YxM2UyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9kb2MvaGlzdG9yeS54bWwKQEAgLTAsMCArMSwxNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgorICAKKyAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKyAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAgLS0+Cis8IURPQ1RZUEUgbGlicmFyeSBQVUJMSUMgIi0vL0Jvb3N0Ly9EVEQgQm9vc3RCb29rIFhNTCBWMS4wLy9FTiIKKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL3Rvb2xzL2Jvb3N0Ym9vay9kdGQvYm9vc3Rib29rLmR0ZCI+Cis8c2VjdGlvbiBpZD0iZnVuY3Rpb24uaGlzdG9yeSIgbGFzdC1yZXZpc2lvbj0iJERhdGU6IDIwMTMtMDYtMTUgMDA6MDY6MjYgLTA3MDAgKFNhdCwgMTUgSnVuIDIwMTMpICQiPgorICA8dGl0bGU+SGlzdG9yeSAmYW1wOyBDb21wYXRpYmlsaXR5IE5vdGVzPC90aXRsZT4KKworPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKworICA8bGlzdGl0ZW0+PHBhcmE+PGJvbGQ+VmVyc2lvbiAxLjUyLjA8L2JvbGQ+OiA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5Nb3ZlIGNvbnN0cnVjdG9ycyBhbmQgbW92ZSBhc3NpZ25tZW50IAorICAgICAgb3BlcmF0b3JzIGFkZGVkIChvbmx5IGZvciBjb21waWxlcnMgd2l0aCBDKysxMSBydmFsdWUgCisgICAgICByZWZlcmVuY2VzIHN1cHBvcnQpLiBPcmlnaW5hbCBwYXRjaAorICAgICAgY29udHJpYnV0ZWQgYnkgQW50b255IFBvbHVraGluLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L2xpc3RpdGVtPgorCisgIDxsaXN0aXRlbT48cGFyYT48Ym9sZD5WZXJzaW9uIDEuMzcuMDwvYm9sZD46IDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPkltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBvZiBCb29zdC5GdW5jdGlvbidzCisgICAgICBzd2FwKCkgb3BlcmF0aW9uIGZvciBsYXJnZSBmdW5jdGlvbiBvYmplY3RzLiBPcmlnaW5hbCBwYXRjaAorICAgICAgY29udHJpYnV0ZWQgYnkgTmllbHMgRGVra2VyLjwvcGFyYT48L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkZWQgYSBuZXcgaGVhZGVyICZsdDtib29zdC9mdW5jdGlvbi9mdW5jdGlvbl90eXBlb2YuaHBwJmd0OyB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHVzaW5nIHRoZSBCb29zdC5UeXBlb2YgbGlicmFyeSBvbiBCb29zdC5GdW5jdGlvbiBvYmplY3RzLjwvcGFyYT48L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkZWQgYSBuZXcgaGVhZGVyICZsdDtib29zdC9mdW5jdGlvbi9mdW5jdGlvbl9md2QuaHBwJmd0OyB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHVzaW5nIHRoZSBCb29zdC5UeXBlb2YgbGlicmFyeSBvbiBCb29zdC5GdW5jdGlvbiBvYmplY3RzLjwvcGFyYT48L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxtZXRob2RuYW1lIGFsdD0iYm9vc3Q6OmZ1bmN0aW9uOjp0YXJnZXQiPnRhcmdldDwvbWV0aG9kbmFtZT4oKQorICAgICAgZnVuY3Rpb24gbm93IHJlc3BlY3RzIHRoZSBjdi1xdWFsaWZpZXJzIG9mIGZ1bmN0aW9uIG9iamVjdHMKKyAgICAgIHN0b3JlZCBieSByZWZlcmVuY2UKKyAgICAgICh1c2luZyA8Y2xhc3NuYW1lPmJvb3N0OjpyZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPiksIHN1Y2gKKyAgICAgIHRoYXQgYSByZWZlcmVuY2UgdG8gYSA8Y29kZT5jb25zdDwvY29kZT4gZnVuY3Rpb24gb2JqZWN0IGNhbm5vdAorICAgICAgYmUgYWNjZXNzZWQgYXMgYSByZWZlcmVuY2UgdG8gYSBub24tPGNvZGU+Y29uc3Q8L2NvZGU+IGZ1bmN0aW9uCisgICAgICBvYmplY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvbGlzdGl0ZW0+CisKKyAgPGxpc3RpdGVtPjxwYXJhPjxib2xkPlZlcnNpb24gMS4zNi4wPC9ib2xkPjogPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+Qm9vc3QuRnVuY3Rpb24gbm93IGltcGxlbWVudHMgYWxsb2NhdG9yIHN1cHBvcnQKKyAgICAgIGluIHRoZSBzYW1lIHdheSB0aGF0IGlzIGlzIHByb3ZpZGVkIGluIEMrKzB4LCBiYXNlZCBvbiBDKysKKyAgICAgIGNvbW1pdHRlZQorICAgICAgcHJvcG9zYWwgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjMwOC5odG1sIj5OMjMwODwvdWxpbms+LiBUaGlzCisgICAgICBjaGFuZ2UgcmVtb3ZlcyB0aGUgPGNvbXB1dGVyb3V0cHV0PkFsbG9jYXRvcjwvY29tcHV0ZXJvdXRwdXQ+CisgICAgICB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4gaW4KKyAgICAgIGZhdm9yIG9mIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhbiBhcmd1bWVudC4gV2hpbGUgdGhpcyBpcyBhCisgICAgICBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlLCBpdCBpcyBsaWtlbHkgdG8gYWZmZWN0IG9ubHkgYSBmZXcKKyAgICAgIHVzZXJzLiBUaGlzIGNoYW5nZSB0byBGdW5jdGlvbiB3YXMgY29udHJpYnV0ZWQgYnkgRW1pbAorICAgICAgRG90Y2hldnNraSwgd2hpY2ggYWxzbyBhdXRob3JlZCB0aGUgY29ycmVzcG9uZGluZyBDKysgY29tbWl0dGVlCisgICAgICBwcm9wb3NhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9saXN0aXRlbT4KKworICA8bGlzdGl0ZW0+PHBhcmE+PGJvbGQ+VmVyc2lvbiAxLjM0LjA8L2JvbGQ+OiA8L3BhcmE+IAorICAgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+Qm9vc3QuRnVuY3Rpb24gbm93IGltcGxlbWVudHMgYSBzbWFsbCBidWZmZXIgb3B0aW1pemF0aW9uLCB3aGljaCBjYW4gZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugd2hlbiBjb3B5aW5nIG9yIGNvbnN0cnVjdGlvbiBCb29zdC5GdW5jdGlvbiBvYmplY3RzIHN0b3Jpbmcgc21hbGwgZnVuY3Rpb24gb2JqZWN0cy4gRm9yIGluc3RhbmNlLCA8Y29kZT5iaW5kKCZhbXA7WDpmb28sICZhbXA7eCwgXzEsIF8yKTwvY29kZT4gcmVxdWlyZXMgbm8gaGVhcCBhbGxvY2F0aW9uIHdoZW4gcGxhY2VkIGludG8gYSBCb29zdC5GdW5jdGlvbiBvYmplY3QuIE5vdGUgdGhhdCBzb21lIGV4Y2VwdGlvbi1zYWZldHkgZ3VhcmFudGVlcyBoYXZlIGNoYW5nZWQ6IGFzc2lnbm1lbnQgcHJvdmlkZXMgdGhlIGJhc2ljIGV4Y2VwdGlvbiBndWFyYW50ZWUgYW5kIDxjb2RlPnN3YXAoKTwvY29kZT4gbWF5IHRocm93LjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L2xpc3RpdGVtPgorCisgIDxsaXN0aXRlbT48cGFyYT48Ym9sZD5WZXJzaW9uIDEuMzAuMDwvYm9sZD46IDwvcGFyYT4gCisgICAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGwgZmVhdHVyZXMgZGVwcmVjYXRlZCBpbiB2ZXJzaW9uIDEuMjkuMCBoYXZlCisgICAgICBiZWVuIHJlbW92ZWQgZnJvbSBCb29zdC5GdW5jdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAKKyAgICAgIDxsaXN0aXRlbT48cGFyYT48Y29kZT48Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPjwvY29kZT4KKyAgICAgIGFuZCA8Y29kZT48Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbk48L2NsYXNzbmFtZT48L2NvZGU+IG9iamVjdHMKKyAgICAgIGNhbiBiZSBhc3NpZ25lZCB0byAwIChzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICA8Y29kZT48bWV0aG9kbmFtZQorICAgICAgYWx0PSJib29zdDo6ZnVuY3Rpb246OmNsZWFyIj5jbGVhcjwvbWV0aG9kbmFtZT4oKTwvY29kZT4pIGFuZAorICAgICAgY29tcGFyZWQgYWdhaW5zdCAwIChzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICA8Y29kZT48bWV0aG9kbmFtZQorICAgICAgYWx0PSJib29zdDo6ZnVuY3Rpb246OmVtcHR5Ij5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4pLjwvcGFyYT48L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEJvb3N0LkZ1bmN0aW9uIGNvZGUgaXMgbm93IGdlbmVyYXRlZAorICAgICAgZW50aXJlbHkgYnkgdGhlIDxsaWJyYXJ5bmFtZT5QcmVwcm9jZXNzb3I8L2xpYnJhcnluYW1lPiBsaWJyYXJ5LAorICAgICAgc28gaXQgaXMgbm93IHBvc3NpYmxlIHRvIGdlbmVyYXRlCisgICAgICA8Y29kZT48Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPjwvY29kZT4gYW5kCisgICAgICA8Y29kZT48Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbk48L2NsYXNzbmFtZT48L2NvZGU+IGNsYXNzCisgICAgICB0ZW1wbGF0ZXMgZm9yIGFueSBudW1iZXIgb2YgYXJndW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICA8Y2xhc3NuYW1lPmJvb3N0OjpiYWRfZnVuY3Rpb25fY2FsbDwvY2xhc3NuYW1lPiBleGNlcHRpb24gY2xhc3MKKyAgICAgIHdhcyBpbnRyb2R1Y2VkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvbGlzdGl0ZW0+CisKKyAgPGxpc3RpdGVtPjxwYXJhPjxib2xkPlZlcnNpb24gMS4yOS4wPC9ib2xkPjoKKyAgQm9vc3QuRnVuY3Rpb24gaGFzIGJlZW4gcGFydGlhbGx5IHJlZGVzaWduZWQgdG8gbWluaW1pemUgdGhlCisgIGludGVyZmFjZSBhbmQgbWFrZSBpdCBjbGVhbmVyLiBTZXZlcmFsIHNlbGRvbS0gb3IgbmV2ZXItdXNlZAorICBmZWF0dXJlcyBvZiB0aGUgb2xkZXIgQm9vc3QuRnVuY3Rpb24gaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwKKyAgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUuIEhlcmUgaXMgYSBsaXN0IG9mIGZlYXR1cmVzIHRoYXQgaGF2ZQorICBiZWVuIGRlcHJlY2F0ZWQsIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoZSBkZXByZWNhdGlvbnMsIGFuZCBob3cgdG8KKyAgYWRqdXN0IHlvdXIgY29kZToKKworPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uPC9jb21wdXRlcm91dHB1dD4gY2xhc3MgdGVtcGxhdGUgc3ludGF4IGhhcworICBjaGFuZ2VkLiBUaGUgb2xkIHN5bnRheCwgZS5nLiwgPGNvbXB1dGVyb3V0cHV0PmJvb3N0OjpmdW5jdGlvbiZsdDtpbnQsIGZsb2F0LAorICBkb3VibGUsIHN0ZDo6c3RyaW5nJmd0OzwvY29tcHV0ZXJvdXRwdXQ+LCBoYXMgYmVlbiBjaGFuZ2VkIHRvIGEgbW9yZSBuYXR1cmFsCisgIHN5bnRheCA8Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uJmx0O2ludCAoZmxvYXQsIGRvdWJsZSwKKyAgc3RkOjpzdHJpbmcpJmd0OzwvY29tcHV0ZXJvdXRwdXQ+LCB3aGVyZSBhbGwgcmV0dXJuIGFuZCBhcmd1bWVudCB0eXBlcyBhcmUKKyAgZW5jb2RlZCBpbiBhIHNpbmdsZSBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlci4gQW55IG90aGVyIHRlbXBsYXRlCisgIHBhcmFtZXRlcnMgKGUuZy4sIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+QWxsb2NhdG9yPC9jb21wdXRlcm91dHB1dD4pIGZvbGxvdyB0aGlzIHNpbmdsZQorICBwYXJhbWV0ZXIuPC9wYXJhPgorCisgIDxwYXJhPiBUaGUgcmVzb2x1dGlvbiB0byB0aGlzIGNoYW5nZSBkZXBlbmRzIG9uIHRoZQorICBhYmlsaXRpZXMgb2YgeW91ciBjb21waWxlcjogaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyB0ZW1wbGF0ZQorICBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGFuZCBjYW4gcGFyc2UgZnVuY3Rpb24gdHlwZXMgKG1vc3QgZG8pLCBtb2RpZnkgCisgIHlvdXIgY29kZSB0byB1c2UgdGhlIG5ld2VyCisgIHN5bnRheCAocHJlZmVyYWJsZSkgb3IgZGlyZWN0bHkgdXNlIG9uZSBvZiB0aGUKKyAgPGNvbXB1dGVyb3V0cHV0PmZ1bmN0aW9uTjwvY29tcHV0ZXJvdXRwdXQ+IGNsYXNzZXMgd2hvc2Ugc3ludGF4IGhhcyBub3QKKyAgY2hhbmdlZC4gSWYgeW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRlbXBsYXRlIHBhcnRpYWwKKyAgc3BlY2lhbGl6YXRpb24gb3IgZnVuY3Rpb24gdHlwZXMsIHlvdSBtdXN0IHRha2UgdGhlIGxhdHRlciBvcHRpb24gYW5kIAorICB1c2UgdGhlIG51bWJlcmVkIEJvb3N0LkZ1bmN0aW9uIGNsYXNzZXMuIFRoaXMgb3B0aW9uIG1lcmVseSByZXF1aXJlcyAKKyAgY2hhbmdpbmcgdHlwZXMgc3VjaCBhcyA8Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uJmx0O3ZvaWQsIGludCwgaW50Jmd0OzwvY29tcHV0ZXJvdXRwdXQ+CisgIHRvIDxjb21wdXRlcm91dHB1dD5ib29zdDo6ZnVuY3Rpb24yJmx0O3ZvaWQsIGludCwgaW50Jmd0OzwvY29tcHV0ZXJvdXRwdXQ+IChhZGRpbmcgdGhlIG51bWJlciBvZgorICBmdW5jdGlvbiBhcmd1bWVudHMgdG8gdGhlIGVuZCBvZiB0aGUgY2xhc3MgbmFtZSkuPC9wYXJhPgorCisgIDxwYXJhPiBTdXBwb3J0IGZvciB0aGUgb2xkIHN5bnRheCB3aXRoIHRoZQorICA8Y29tcHV0ZXJvdXRwdXQ+Ym9vc3Q6OmZ1bmN0aW9uPC9jb21wdXRlcm91dHB1dD4gY2xhc3MgdGVtcGxhdGUgd2lsbCBwZXJzaXN0IGZvciBhIHNob3J0CisgIHdoaWxlLCBidXQgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQgc28gdGhhdCB3ZSBjYW4gcHJvdmlkZSBiZXR0ZXIKKyAgZXJyb3IgbWVzc2FnZXMgYW5kIGxpbmsgY29tcGF0aWJpbGl0eS4gPC9wYXJhPjwvbGlzdGl0ZW0+IAorCisgIDxsaXN0aXRlbT48cGFyYT5UaGUgaW52b2NhdGlvbgorICBwb2xpY3kgdGVtcGxhdGUgcGFyYW1ldGVyICg8Y29tcHV0ZXJvdXRwdXQ+UG9saWN5PC9jb21wdXRlcm91dHB1dD4pIGhhcyBiZWVuIGRlcHJlY2F0ZWQKKyAgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVGhlcmUgaXMgbm8gZGlyZWN0IGVxdWl2YWxlbnQgdG8gdGhpcyByYXJlbHkKKyAgdXNlZCBmZWF0dXJlLjwvcGFyYT48L2xpc3RpdGVtPiAKKworICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG1peGluIHRlbXBsYXRlIHBhcmFtZXRlcgorICAoPGNvbXB1dGVyb3V0cHV0Pk1peGluPC9jb21wdXRlcm91dHB1dD4pIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVGhlcmUKKyAgaXMgbm90IGRpcmVjdCBlcXVpdmFsZW50IHRvIHRoaXMgcmFyZWx5IHVzZWQgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4gCisKKyAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICA8Y29tcHV0ZXJvdXRwdXQ+c2V0PC9jb21wdXRlcm91dHB1dD4gbWV0aG9kcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorICByZW1vdmVkLiBVc2UgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgaW5zdGVhZC48L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorPC9wYXJhPgorPC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvbWlzYy54bWwgYi9saWJzL2Z1bmN0aW9uL2RvYy9taXNjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGY0ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9kb2MvbWlzYy54bWwKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgIENvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIEdyZWdvciA8ZG91Zy5ncmVnb3IgLWF0LSBnbWFpbC5jb20+CisgIAorICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICAtLT4KKzwhRE9DVFlQRSBsaWJyYXJ5IFBVQkxJQyAiLS8vQm9vc3QvL0RURCBCb29zdEJvb2sgWE1MIFYxLjAvL0VOIgorICAiaHR0cDovL3d3dy5ib29zdC5vcmcvdG9vbHMvYm9vc3Rib29rL2R0ZC9ib29zdGJvb2suZHRkIj4KKzxzZWN0aW9uIGlkPSJmdW5jdGlvbi5taXNjIiBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAwOC0wNy0xNCAxMTozMjoyOSAtMDcwMCAoTW9uLCAxNCBKdWwgMjAwOCkgJCI+CisgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIE5vdGVzPC90aXRsZT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+Qm9vc3QuRnVuY3Rpb24gdnMuIEZ1bmN0aW9uIFBvaW50ZXJzPC90aXRsZT4KKzxwYXJhPkJvb3N0LkZ1bmN0aW9uIGhhcyBzZXZlcmFsIGFkdmFudGFnZXMgb3ZlciBmdW5jdGlvbiBwb2ludGVycywgbmFtZWx5OgorCis8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPjxwYXJhPkJvb3N0LkZ1bmN0aW9uIGFsbG93cyBhcmJpdHJhcnkgY29tcGF0aWJsZSBmdW5jdGlvbiBvYmplY3RzIHRvIGJlIHRhcmdldHMgKGluc3RlYWQgb2YgcmVxdWlyaW5nIGFuIGV4YWN0IGZ1bmN0aW9uIHNpZ25hdHVyZSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+PHBhcmE+Qm9vc3QuRnVuY3Rpb24gbWF5IGJlIHVzZWQgd2l0aCBhcmd1bWVudC1iaW5kaW5nIGFuZCBvdGhlciBmdW5jdGlvbiBvYmplY3QgY29uc3RydWN0aW9uIGxpYnJhcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT48cGFyYT5Cb29zdC5GdW5jdGlvbiBoYXMgcHJlZGljdGlibGUgYmVoYXZpb3Igd2hlbiBhbiBlbXB0eSBmdW5jdGlvbiBvYmplY3QgaXMgY2FsbGVkLiA8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KKworPHBhcmE+IEFuZCwgb2YgY291cnNlLCBmdW5jdGlvbiBwb2ludGVycyBoYXZlIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIEJvb3N0LkZ1bmN0aW9uOgorCis8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgIDxsaXN0aXRlbT48cGFyYT4gRnVuY3Rpb24gcG9pbnRlcnMgYXJlIHNtYWxsZXIgKHRoZSBzaXplIG9mIG9uZSBwb2ludGVyIGluc3RlYWQgb2YgZm91ciBvciBtb3JlKSA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+IEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBmYXN0ZXIgKEJvb3N0LkZ1bmN0aW9uIG1heSByZXF1aXJlIHR3byBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKSA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+IEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBiYWNrd2FyZC1jb21wYXRpYmxlIHdpdGggQyBsaWJyYXJpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPiBNb3JlIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzLiA8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlBlcmZvcm1hbmNlPC90aXRsZT4KKworPHNlY3Rpb24+CisgIDx0aXRsZT5GdW5jdGlvbiBvYmplY3Qgd3JhcHBlciBzaXplPC90aXRsZT4KKyAgPHBhcmE+IEZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycyB3aWxsIGJlIHRoZSBzaXplIG9mIGEgc3RydWN0IGNvbnRhaW5pbmcgYSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlciBhbmQgdHdvIGRhdGEgcG9pbnRlcnMuIFRoZSBhY3R1YWwgc2l6ZSBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybTsgb24gMzItYml0IE1hYyBPUyBYIHdpdGggR0NDLCB0aGlzIGFtb3VudHMgdG8gMTYgYnl0ZXMsIHdoaWxlIGl0IGlzIDMyIGJ5dGVzIFdpbmRvd3Mgd2l0aCBWaXN1YWwgQysrLiBBZGRpdGlvbmFsbHksIHRoZSBmdW5jdGlvbiBvYmplY3QgdGFyZ2V0IG1heSBiZSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIGlmIGl0IGNhbm5vdCBiZSBwbGFjZWQgaW50byB0aGUgc21hbGwtb2JqZWN0IGJ1ZmZlciBpbiB0aGUgPGNvZGU+Ym9vc3Q6OmZ1bmN0aW9uPC9jb2RlPiBvYmplY3QuPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbj4KKyAgPHRpdGxlPkNvcHlpbmcgZWZmaWNpZW5jeTwvdGl0bGU+CisgIDxwYXJhPiBDb3B5aW5nIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycyBtYXkgcmVxdWlyZSBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSBjb3B5IG9mIHRoZSBmdW5jdGlvbiBvYmplY3QgdGFyZ2V0LiBUaGUgZGVmYXVsdCBhbGxvY2F0b3IgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBmYXN0ZXIgY3VzdG9tIGFsbG9jYXRvciBvciBvbmUgbWF5IGNob29zZSB0byBhbGxvdyB0aGUgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzIHRvIG9ubHkgc3RvcmUgZnVuY3Rpb24gb2JqZWN0IHRhcmdldHMgYnkgcmVmZXJlbmNlICh1c2luZyA8Y29tcHV0ZXJvdXRwdXQ+cmVmPC9jb21wdXRlcm91dHB1dD4pIGlmIHRoZSBjb3N0IG9mIHRoaXMgY2xvbmluZyBiZWNvbWVzIHByb2hpYml0aXZlLiBTbWFsbCBmdW5jdGlvbiBvYmplY3RzIGNhbiBiZSBzdG9yZWQgd2l0aGluIHRoZSA8Y29kZT5ib29zdDo6ZnVuY3Rpb248L2NvZGU+IG9iamVjdCBpdHNlbGYsIGltcHJvdmluZyBjb3B5aW5nIGVmZmljaWVuY3kuPC9wYXJhPgorIDwvc2VjdGlvbj4KKworPHNlY3Rpb24+CisgIDx0aXRsZT5JbnZvY2F0aW9uIGVmZmljaWVuY3k8L3RpdGxlPgorPHBhcmE+IFdpdGggYSBwcm9wZXJseSBpbmxpbmluZyBjb21waWxlciwgYW4gaW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uIG9iamVjdCByZXF1aXJlcyBvbmUgY2FsbCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlci4gSWYgdGhlIGNhbGwgaXMgdG8gYSBmcmVlIGZ1bmN0aW9uIHBvaW50ZXIsIGFuIGFkZGl0aW9uYWwgY2FsbCBtdXN0IGJlIG1hZGUgdG8gdGhhdCBmdW5jdGlvbiBwb2ludGVyICh1bmxlc3MgdGhlIGNvbXBpbGVyIGhhcyB2ZXJ5IHBvd2VyZnVsIGludGVycHJvY2VkdXJhbCBhbmFseXNpcykuPC9wYXJhPgorICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPkNvbWJhdHRpbmcgdmlydHVhbCBmdW5jdGlvbiAiYmxvYXQiPC90aXRsZT4KKzxwYXJhPiBUaGUgdXNlIG9mIHZpcnR1YWwgZnVuY3Rpb25zIHRlbmRzIHRvIGNhdXNlICdjb2RlIGJsb2F0JyBvbiBtYW55IGNvbXBpbGVycy4gV2hlbiBhIGNsYXNzIGNvbnRhaW5zIGEgdmlydHVhbCBmdW5jdGlvbiwgaXQgaXMgbmVjZXNzYXJ5IHRvIGVtaXQgYW4gYWRkaXRpb25hbCBmdW5jdGlvbiB0aGF0IGNsYXNzaWZpZXMgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4gSXQgaGFzIGJlZW4gb3VyIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHNpZ25pZmljYW50bHkgd2hlbiBtYW55IDxjb21wdXRlcm91dHB1dD5ib29zdDo6ZnVuY3Rpb248L2NvbXB1dGVyb3V0cHV0PiBvYmplY3RzIGFyZSB1c2VkLiA8L3BhcmE+CisKKzxwYXJhPiBJbiBCb29zdC5GdW5jdGlvbiwgYW4gYWx0ZXJuYXRpdmUgYnV0IGVxdWl2YWxlbnQgYXBwcm9hY2ggd2FzIHRha2VuIHVzaW5nIGZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBCb29zdC5GdW5jdGlvbiBvYmplY3QgZXNzZW50aWFsbHkgaG9sZHMgdHdvIHBvaW50ZXJzIHRvIG1ha2UgYSB2YWxpZCB0YXJnZXQgY2FsbDogYSB2b2lkIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdCBpdCBjb250YWlucyBhbmQgYSB2b2lkIHBvaW50ZXIgdG8gYW4gImludm9rZXIiIHRoYXQgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgaW52b2tlciBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSBjb252ZXJzaW9ucyBCb29zdC5GdW5jdGlvbiBwcm92aWRlcy4gQSB0aGlyZCBwb2ludGVyIHBvaW50cyB0byBhIGZyZWUgZnVuY3Rpb24gY2FsbGVkIHRoZSAibWFuYWdlciIsIHdoaWNoIGhhbmRsZXMgdGhlIGNsb25pbmcgYW5kIGRlc3RydWN0aW9uIG9mIGZ1bmN0aW9uIG9iamVjdHMuIFRoZSBzY2hlbWUgaXMgdHlwZXNhZmUgYmVjYXVzZSB0aGUgb25seSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBoYW5kbGUgdGhlIGZ1bmN0aW9uIG9iamVjdCwgdGhlIGludm9rZXIgYW5kIHRoZSBtYW5hZ2VyLCBhcmUgaW5zdGFudGlhdGVkIGdpdmVuIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QsIHNvIHRoZXkgY2FuIHNhZmVseSBjYXN0IHRoZSBpbmNvbWluZyB2b2lkIHBvaW50ZXIgKHRoZSBmdW5jdGlvbiBvYmplY3QgcG9pbnRlcikgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPkFja25vd2xlZGdlbWVudHM8L3RpdGxlPiAKKworICAgIDxwYXJhPiBNYW55IHBlb3BsZSB3ZXJlIGludm9sdmVkIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhpcworICAgIGxpYnJhcnkuIFdpbGxpYW0gS2VtcGYsIEplc3NlIEpvbmVzIGFuZCBLYXJsIE5lbHNvbiB3ZXJlIGFsbAorICAgIGV4dHJlbWVseSBoZWxwZnVsIGluIGlzb2xhdGluZyBhbiBpbnRlcmZhY2UgYW5kIHNjb3BlIGZvciB0aGUKKyAgICBsaWJyYXJ5LiBKb2huIE1hZGRvY2sgbWFuYWdlZCB0aGUgZm9ybWFsIHJldmlldywgYW5kIG1hbnkKKyAgICByZXZpZXdlcnMgZ2F2ZSBleGNlbGxlbnQgY29tbWVudHMgb24gaW50ZXJmYWNlLCBpbXBsZW1lbnRhdGlvbiwKKyAgICBhbmQgZG9jdW1lbnRhdGlvbi4gUGV0ZXIgRGltb3YgbGVkIHVzIHRvIHRoZSBmdW5jdGlvbgorICAgIGRlY2xhcmF0b3ItYmFzZWQgc3ludGF4LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvcmVmZXJlbmNlLnhtbCBiL2xpYnMvZnVuY3Rpb24vZG9jL3JlZmVyZW5jZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjOTE0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb24vZG9jL3JlZmVyZW5jZS54bWwKQEAgLTAsMCArMSw5OTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgorICAKKyAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKyAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAgLS0+Cis8IURPQ1RZUEUgbGlicmFyeSBQVUJMSUMgIi0vL0Jvb3N0Ly9EVEQgQm9vc3RCb29rIFhNTCBWMS4wLy9FTiIKKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL3Rvb2xzL2Jvb3N0Ym9vay9kdGQvYm9vc3Rib29rLmR0ZCI+CisKKzxsaWJyYXJ5LXJlZmVyZW5jZSBpZD0iZnVuY3Rpb24ucmVmZXJlbmNlIiBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAxMy0wNi0xNSAwMDowNjoyNiAtMDcwMCAoU2F0LCAxNSBKdW4gMjAxMykgJCI+CisKKzxzZWN0aW9uIGlkPSJmdW5jdGlvbi5kZWZpbml0aW9ucyI+CisgIDx0aXRsZT5EZWZpbml0aW9uczwvdGl0bGU+Cis8cGFyYT4KKyAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5BIGZ1bmN0aW9uIG9iamVjdCA8Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IGlzCisgICAgICA8ZW1waGFzaXM+Y29tcGF0aWJsZTwvZW1waGFzaXM+IGlmIGZvciB0aGUgZ2l2ZW4gc2V0IG9mIGFyZ3VtZW50CisgICAgICB0eXBlcyA8Y29tcHV0ZXJvdXRwdXQ+QXJnMTwvY29tcHV0ZXJvdXRwdXQ+LAorICAgICAgPGNvbXB1dGVyb3V0cHV0PkFyZzI8L2NvbXB1dGVyb3V0cHV0PiwgLi4uLAorICAgICAgPGNvbXB1dGVyb3V0cHV0PkFyZ048L2NvbXB1dGVyb3V0cHV0PiBhbmQgYQorICAgICAgcmV0dXJuIHR5cGUgPGNvbXB1dGVyb3V0cHV0PlJlc3VsdFR5cGU8L2NvbXB1dGVyb3V0cHV0PiwgdGhlCisgICAgICBhcHByb3ByaWF0ZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgd2VsbC1mb3JtZWQ6Cis8cHJvZ3JhbWxpc3Rpbmc+CisgIDxlbXBoYXNpcz4vLyBpZiBSZXN1bHRUeXBlIGlzIG5vdCA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dm9pZDwvZW1waGFzaXM+PC9lbXBoYXNpcz4KKyAgUmVzdWx0VHlwZSBmb28oQXJnMSBhcmcxLCBBcmcyIGFyZzIsIC4uLiwgQXJnPGVtcGhhc2lzPk48L2VtcGhhc2lzPiBhcmc8ZW1waGFzaXM+TjwvZW1waGFzaXM+KQorICB7CisgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJldHVybjwvZW1waGFzaXM+IGYoYXJnMSwgYXJnMiwgLi4uLCBhcmc8ZW1waGFzaXM+TjwvZW1waGFzaXM+KTsKKyAgfQorCisgIDxlbXBoYXNpcz4vLyBpZiBSZXN1bHRUeXBlIGlzIDxlbXBoYXNpcyByb2xlPSJib2xkIj52b2lkPC9lbXBoYXNpcz48L2VtcGhhc2lzPgorICBSZXN1bHRUeXBlIGZvbyhBcmcxIGFyZzEsIEFyZzIgYXJnMiwgLi4uLCBBcmc8ZW1waGFzaXM+TjwvZW1waGFzaXM+IGFyZzxlbXBoYXNpcz5OPC9lbXBoYXNpcz4pCisgIHsKKyAgICBmKGFyZzEsIGFyZzIsIC4uLiwgYXJnPGVtcGhhc2lzPk48L2VtcGhhc2lzPik7CisgIH0KKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgICAgICA8cGFyYT4gQSBzcGVjaWFsIHByb3Zpc2lvbiBpcyBtYWRlIGZvciBwb2ludGVycyB0byBtZW1iZXIKKyAgICAgIGZ1bmN0aW9ucy4gVGhvdWdoIHRoZXkgYXJlIG5vdCBmdW5jdGlvbiBvYmplY3RzLCBCb29zdC5GdW5jdGlvbgorICAgICAgd2lsbCBhZGFwdCB0aGVtIGludGVybmFsbHkgdG8gZnVuY3Rpb24gb2JqZWN0cy4gVGhpcyByZXF1aXJlcworICAgICAgdGhhdCBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIDxjb2RlPlIKKyAgICAgIChYOjoqbWYpKEFyZzEsIEFyZzIsIC4uLiwgQXJnTikKKyAgICAgIGN2LXF1YWxzPC9jb2RlPiBiZSBhZGFwdGVkIHRvIGEKKyAgICAgIGZ1bmN0aW9uIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCBvcGVyYXRvcgorICAgICAgb3ZlcmxvYWRzOgorPHByb2dyYW1saXN0aW5nPgorICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dGVtcGxhdGU8L2VtcGhhc2lzPiZsdDs8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dHlwZW5hbWUgUDwvZW1waGFzaXM+Jmd0OworICBSIDxlbXBoYXNpcyByb2xlPSJib2xkIj5vcGVyYXRvcjwvZW1waGFzaXM+KCkoPGVtcGhhc2lzPmN2LXF1YWxzPC9lbXBoYXNpcz4gUCZhbXA7IHgsIEFyZzEgYXJnMSwgQXJnMiBhcmcyLCAuLi4sIEFyZzxlbXBoYXNpcz5OPC9lbXBoYXNpcz4gYXJnPGVtcGhhc2lzPk48L2VtcGhhc2lzPikgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPmNvbnN0PC9lbXBoYXNpcz4KKyAgeworICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXR1cm48L2VtcGhhc2lzPiAoKngpLiptZihhcmcxLCBhcmcyLCAuLi4sIGFyZzxlbXBoYXNpcz5OPC9lbXBoYXNpcz4pOworICB9Cis8L3Byb2dyYW1saXN0aW5nPgorPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+QSBmdW5jdGlvbiBvYmplY3QgPGNvZGU+ZjwvY29kZT4gb2YKKyAgICAgIHR5cGUgPGNvZGU+RjwvY29kZT4gaXMKKyAgICAgIDxlbXBoYXNpcz5zdGF0ZWxlc3M8L2VtcGhhc2lzPiBpZiBpdCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgaWYKKyAgICAgIDxjb2RlPjxjbGFzc25hbWU+Ym9vc3Q6OmlzX3N0YXRlbGVzczwvY2xhc3NuYW1lPiZsdDtGJmd0OzwvY29kZT4KKyAgICAgIGlzIHRydWUuIFRoZSBjb25zdHJ1Y3Rpb24gb2Ygb3IgY29weSB0byBhIEJvb3N0LkZ1bmN0aW9uIG9iamVjdAorICAgICAgZnJvbSBhIHN0YXRlbGVzcyBmdW5jdGlvbiBvYmplY3Qgd2lsbCBub3QgY2F1c2UgZXhjZXB0aW9ucyB0byBiZQorICAgICAgdGhyb3duIGFuZCB3aWxsIG5vdCBhbGxvY2F0ZSBhbnkgc3RvcmFnZS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvcGFyYT4KKzwvc2VjdGlvbj4KKworPGhlYWRlciBuYW1lPSJib29zdC9mdW5jdGlvbi5ocHAiPgorPG5hbWVzcGFjZSBuYW1lPSJib29zdCI+CisgIDxjbGFzcyBuYW1lPSJiYWRfZnVuY3Rpb25fY2FsbCI+CisgICAgPGluaGVyaXQgYWNjZXNzPSJwdWJsaWMiPjxjbGFzc25hbWU+c3RkOjpydW50aW1lX2Vycm9yPC9jbGFzc25hbWU+PC9pbmhlcml0PgorICAgIDxwdXJwb3NlPkFuIGV4Y2VwdGlvbiB0eXBlIHRocm93biB3aGVuIGFuIGluc3RhbmNlIG9mIGEgPGNvZGU+ZnVuY3Rpb248L2NvZGU+IG9iamVjdCBpcyBlbXB0eSB3aGVuIGludm9rZWQuPC9wdXJwb3NlPgorICAgIDxjb25zdHJ1Y3Rvcj4KKyAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPkNvbnN0cnVjdHMgYSA8Y29kZT48Y2xhc3NuYW1lPmJhZF9mdW5jdGlvbl9jYWxsPC9jbGFzc25hbWU+PC9jb2RlPiBleGNlcHRpb24gb2JqZWN0Ljwvc2ltcGFyYT48L2VmZmVjdHM+CisgICAgPC9jb25zdHJ1Y3Rvcj4KKyAgPC9jbGFzcz4KKworICA8Y2xhc3MgbmFtZT0iZnVuY3Rpb25fYmFzZSI+CisgICAgPHB1cnBvc2U+VGhlIGNvbW1vbiBiYXNlIGNsYXNzIGZvciBhbGwgQm9vc3QuRnVuY3Rpb24KKyAgICBvYmplY3RzLiBPYmplY3RzIG9mIHR5cGUgZnVuY3Rpb25fYmFzZSBtYXkgbm90IGJlIGNyZWF0ZWQKKyAgICBkaXJlY3RseS48L3B1cnBvc2U+CisKKyAgICA8bWV0aG9kLWdyb3VwIG5hbWU9ImNhcGFjaXR5Ij4KKyAgICAgIDxtZXRob2QgbmFtZT0iZW1wdHkiIGN2PSJjb25zdCI+CisgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50aGlzPC9jb2RlPiBoYXMgYSB0YXJnZXQsIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L21ldGhvZD4KKyAgICA8L21ldGhvZC1ncm91cD4KKworICAgIDxtZXRob2QtZ3JvdXAgbmFtZT0idGFyZ2V0IGFjY2VzcyI+CisgICAgICA8b3ZlcmxvYWRlZC1tZXRob2QgbmFtZT0idGFyZ2V0Ij4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+IAorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPkZ1bmN0b3IqPC90eXBlPgorICAgICAgICA8L3NpZ25hdHVyZT4KKyAgICAgICAgPHNpZ25hdHVyZSBjdj0iY29uc3QiPgorICAgICAgICAgIDx0ZW1wbGF0ZT4gCisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Y29uc3QgRnVuY3Rvcio8L3R5cGU+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPklmIDxjb2RlPnRoaXM8L2NvZGU+IHN0b3JlcyBhIHRhcmdldCBvZiB0eXBlCisgICAgICAgIDxjb2RlPkZ1bmN0b3I8L2NvZGU+LCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZQorICAgICAgICB0YXJnZXQuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgTlVMTAorICAgICAgICBwb2ludGVyLjwvc2ltcGFyYT48L3JldHVybnM+CisKKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L292ZXJsb2FkZWQtbWV0aG9kPgorCisgICAgICA8bWV0aG9kIG5hbWU9ImNvbnRhaW5zIiBjdj0iY29uc3QiPgorICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KKyAgICAgICAgICA8cGFyYW10eXBlPmNvbnN0IEZ1bmN0b3ImYW1wOzwvcGFyYW10eXBlPgorICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+dGFyZ2V0PC9tZXRob2RuYW1lPiZsdDtGdW5jdG9yJmd0OygpPC9jb2RlPiBpcyBub24tTlVMTCBhbmQgPGNvZGU+PGZ1bmN0aW9ubmFtZT5mdW5jdGlvbl9lcXVhbDwvZnVuY3Rpb25uYW1lPigqKHRoaXMtJmd0O3RhcmdldCZsdDtGdW5jdG9yJmd0OygpKSwgZik8L2NvZGU+PC9zaW1wYXJhPjwvcmV0dXJucz4KKyAKKyAgICAgIDwvbWV0aG9kPgorCisgICAgICA8bWV0aG9kIG5hbWU9InRhcmdldF90eXBlIiBjdj0iY29uc3QiPgorICAgICAgICA8dHlwZT5jb25zdCBzdGQ6OnR5cGVfaW5mbyZhbXA7PC90eXBlPgorICAgICAgICA8cmV0dXJucz48c2ltcGFyYT48Y29kZT50eXBlaWQ8L2NvZGU+IG9mIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0LCBvciA8Y29kZT50eXBlaWQodm9pZCk8L2NvZGU+IGlmIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9yZXR1cm5zPgorICAgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93Ljwvc2ltcGFyYT48L3Rocm93cz4KKyAgICAgIDwvbWV0aG9kPgorICAgIDwvbWV0aG9kLWdyb3VwPgorICA8L2NsYXNzPgorCisgIDxjbGFzcyBuYW1lPSJmdW5jdGlvbk4iPgorICAgIDx0ZW1wbGF0ZT4KKyAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJSIi8+CisgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KKyAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgorICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgorICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+CisgICAgPC90ZW1wbGF0ZT4KKworICAgIDxpbmhlcml0IGFjY2Vzcz0icHVibGljIj48Y2xhc3NuYW1lPmZ1bmN0aW9uX2Jhc2U8L2NsYXNzbmFtZT48L2luaGVyaXQ+CisKKyAgICA8cHVycG9zZT5BIHNldCBvZiBnZW5lcmFsaXplZCBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjYWxsYmFja3Mgb3Igd3JhcHBpbmcgZnVuY3Rpb24gb2JqZWN0cy48L3B1cnBvc2U+CisKKyAgICA8ZGVzY3JpcHRpb24+CisgICAgICA8cGFyYT5DbGFzcyB0ZW1wbGF0ZSA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiBpcworICAgICAgYWN0dWFsbHkgYSBmYW1pbHkgb2YgcmVsYXRlZCBjbGFzc2VzIDxjbGFzc25hbWUKKyAgICAgIGFsdD0iZnVuY3Rpb25OIj5mdW5jdGlvbjA8L2NsYXNzbmFtZT4sIDxjbGFzc25hbWUKKyAgICAgIGFsdD0iZnVuY3Rpb25OIj5mdW5jdGlvbjE8L2NsYXNzbmFtZT4sIGV0Yy4sIHVwIHRvIHNvbWUKKyAgICAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWF4aW11bS4gSW4gdGhpcyBjb250ZXh0LCA8Y29kZT5OPC9jb2RlPgorICAgICAgcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycy48L3BhcmE+CisgICAgPC9kZXNjcmlwdGlvbj4KKworICAgIDx0eXBlZGVmIG5hbWU9InJlc3VsdF90eXBlIj48dHlwZT5SPC90eXBlPjwvdHlwZWRlZj4KKyAgICA8dHlwZWRlZiBuYW1lPSJhcmd1bWVudF90eXBlIj4KKyAgICAgIDx0eXBlPlQxPC90eXBlPjxwdXJwb3NlPklmIE4gPT0gMTwvcHVycG9zZT4KKyAgICA8L3R5cGVkZWY+CisgICAgPHR5cGVkZWYgbmFtZT0iZmlyc3RfYXJndW1lbnRfdHlwZSI+CisgICAgICA8dHlwZT5UMTwvdHlwZT4KKyAgICAgIDxwdXJwb3NlPklmIE4gPT0gMjwvcHVycG9zZT4KKyAgICA8L3R5cGVkZWY+CisgICAgPHR5cGVkZWYgbmFtZT0ic2Vjb25kX2FyZ3VtZW50X3R5cGUiPgorICAgICAgPHR5cGU+VDI8L3R5cGU+CisgICAgICA8cHVycG9zZT5JZiBOID09IDI8L3B1cnBvc2U+CisgICAgPC90eXBlZGVmPgorICAgIDx0eXBlZGVmIG5hbWU9ImFyZzFfdHlwZSI+PHR5cGU+VDE8L3R5cGU+PC90eXBlZGVmPgorICAgIDx0eXBlZGVmIG5hbWU9ImFyZzJfdHlwZSI+PHR5cGU+VDI8L3R5cGU+PC90eXBlZGVmPgorICAgIDx0eXBlZGVmIG5hbWU9Ii4uLiI+PHR5cGUvPjwvdHlwZWRlZj4KKyAgICA8dHlwZWRlZiBuYW1lPSJhcmdOX3R5cGUiPjx0eXBlPlROPC90eXBlPjwvdHlwZWRlZj4KKworICAgIDxzdGF0aWMtY29uc3RhbnQgbmFtZT0iYXJpdHkiPgorICAgICAgPHR5cGU+aW50PC90eXBlPgorICAgICAgPGRlZmF1bHQ+TjwvZGVmYXVsdD4KKyAgICA8L3N0YXRpYy1jb25zdGFudD4KKworICAgIDxzdHJ1Y3QgbmFtZT0ic2lnIj4KKyAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkFyZ3MiLz4KKyAgICAgIDwvdGVtcGxhdGU+CisKKyAgICAgIDxwdXJwb3NlPgorICAgICAgICA8c2ltcGFyYT48bGlicmFyeW5hbWU+TGFtYmRhPC9saWJyYXJ5bmFtZT4gbGlicmFyeSBzdXBwb3J0PC9zaW1wYXJhPgorICAgICAgPC9wdXJwb3NlPgorCisgICAgICA8dHlwZWRlZiBuYW1lPSJ0eXBlIj48dHlwZT5yZXN1bHRfdHlwZTwvdHlwZT48L3R5cGVkZWY+CisgICAgPC9zdHJ1Y3Q+CisKKyAgICA8Y29uc3RydWN0b3I+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+PC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93Ljwvc2ltcGFyYT48L3Rocm93cz4KKyAgICA8L2NvbnN0cnVjdG9yPgorCisgICAgPGNvbnN0cnVjdG9yPgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KKyAgICAgICAgPHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7PC9wYXJhbXR5cGU+CisgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Db250YWlucyBhIGNvcHkgb2YgdGhlIDxjb2RlPmY8L2NvZGU+J3MgdGFyZ2V0LCBpZiBpdCBoYXMgb25lLCBvciBpcyBlbXB0eSBpZiA8Y29kZT5mLjxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgIDwvY29uc3RydWN0b3I+CisKKyAgICA8Y29uc3RydWN0b3I+CisgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgorICAgICAgICA8cGFyYW10eXBlPjxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+JmFtcDsmYW1wOzwvcGFyYW10eXBlPgorICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICA8cmVxdWlyZXM+PHNpbXBhcmE+QysrMTEgY29tcGF0aWJsZSBjb21waWxlci48L3NpbXBhcmE+PC9yZXF1aXJlcz4KKyAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Nb3ZlcyB0aGUgdmFsdWUgZnJvbSA8Y29kZT5mPC9jb2RlPiB0byA8Y29kZT4qdGhpczwvY29kZT4uIElmIHRoZSBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIGl0cyBidWZmZXIgd2lsbCBiZSBhc3NpZ25lZCB0byA8Y29kZT4qdGhpczwvY29kZT4gbGVhdmluZyBhcmd1bWVudCBlbXB0eS48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGFyZ3VtZW50IGhhcyBpdHMgZnVuY3Rpb24gb2JqZWN0IGFsbG9jYXRlZCBub3Qgb24gdGhlIGhlYXAgYW5kIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgIDwvY29uc3RydWN0b3I+CisgICAgCisgICAgPGNvbnN0cnVjdG9yPgorICAgICAgPHRlbXBsYXRlPgorICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRiIvPgorICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5GPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICA8cmVxdWlyZXM+PHNpbXBhcmE+RiBpcyBhIGZ1bmN0aW9uIG9iamVjdCBDYWxsYWJsZSBmcm9tIDxjb2RlPnRoaXM8L2NvZGU+Ljwvc2ltcGFyYT48L3JlcXVpcmVzPgorICAgICAgPHBvc3Rjb25kaXRpb25zPjxzaW1wYXJhPjxjb2RlPip0aGlzPC9jb2RlPiB0YXJnZXRzIGEgY29weSBvZiA8Y29kZT5mPC9jb2RlPiBpZiA8Y29kZT5mPC9jb2RlPiBpcyBub25lbXB0eSwgb3IgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+IGlmIDxjb2RlPmY8L2NvZGU+IGlzIGVtcHR5Ljwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgorICAgIDwvY29uc3RydWN0b3I+CisKKyAgICA8Y29uc3RydWN0b3I+CisgICAgICA8dGVtcGxhdGU+CisgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGIi8+CisgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBbGxvY2F0b3IiLz4KKyAgICAgIDwvdGVtcGxhdGU+CisgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+RjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJhbGxvYyI+PHBhcmFtdHlwZT5BbGxvY2F0b3I8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgIDxyZXF1aXJlcz48c2ltcGFyYT5GIGlzIGEgZnVuY3Rpb24gb2JqZWN0IENhbGxhYmxlIGZyb20gPGNvZGU+dGhpczwvY29kZT4sIEFsbG9jYXRvciBpcyBhbiBhbGxvY2F0b3IuIFRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIG9mIEFsbG9jYXRvciBzaGFsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvcmVxdWlyZXM+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+KnRoaXM8L2NvZGU+IHRhcmdldHMgYSBjb3B5IG9mIDxjb2RlPmY8L2NvZGU+IGlmIDxjb2RlPmY8L2NvZGU+IGlzIG5vbmVtcHR5LCBvciA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4gaWYgPGNvZGU+ZjwvY29kZT4gaXMgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisKKyAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPklmIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHJlcXVpcmVkLCB0aGUgZ2l2ZW4gYWxsb2NhdG9yIChvciBhIGNvcHkgb2YgaXQpIHdpbGwgYmUgdXNlZCB0byBhbGxvY2F0ZSB0aGF0IG1lbW9yeS48L3NpbXBhcmE+PC9lZmZlY3RzPgorICAgIDwvY29uc3RydWN0b3I+CisKKyAgICA8ZGVzdHJ1Y3Rvcj4KKyAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPklmIDxjb2RlPiF0aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4sIGRlc3Ryb3lzIHRoZSB0YXJnZXQgb2YgdGhpcy48L3NpbXBhcmE+PC9lZmZlY3RzPgorCisgICAgPC9kZXN0cnVjdG9yPgorCisgICAgPGNvcHktYXNzaWdubWVudD4KKyAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+CisgICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPgorICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+SWYgY29weSBjb25zdHJ1Y3Rpb24gZG9lcyBub3QgdGhyb3csIDxjb2RlPip0aGlzPC9jb2RlPiB0YXJnZXRzIGEgY29weSBvZiA8Y29kZT5mPC9jb2RlPidzIHRhcmdldCwgaWYgaXQgaGFzIG9uZSwgb3IgaXMgZW1wdHkgaWYgPGNvZGU+Zi48bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4uIElmIGNvcHkgY29uc3RydWN0aW9uIGRvZXMgdGhyb3csIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICA8L2NvcHktYXNzaWdubWVudD4KKyAgICAKKyAgICA8Y29weS1hc3NpZ25tZW50PgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KKyAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7JmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkMrKzExIGNvbXBhdGlibGUgY29tcGlsZXIuPC9zaW1wYXJhPjwvcmVxdWlyZXM+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+TW92ZXMgdGhlIHZhbHVlIGZyb20gPGNvZGU+ZjwvY29kZT4gdG8gPGNvZGU+KnRoaXM8L2NvZGU+LiBJZiB0aGUgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCBpdHMgYnVmZmVyIHdpbGwgYmUgYXNzaWduZWQgdG8gPGNvZGU+KnRoaXM8L2NvZGU+IGxlYXZpbmcgYXJndW1lbnQgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHVubGVzcyBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgbm90IG9uIHRoZSBoZWFwIGFuZCBjb3B5aW5nIHRoZSB0YXJnZXQgb2YgPGNvZGU+ZjwvY29kZT4gdGhyb3dzLjwvc2ltcGFyYT48L3Rocm93cz4KKyAgICA8L2NvcHktYXNzaWdubWVudD4KKworICAgIDxtZXRob2QtZ3JvdXAgbmFtZT0ibW9kaWZpZXJzIj4KKyAgICAgIDxtZXRob2QgbmFtZT0ic3dhcCI+CisgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPkludGVyY2hhbmdlcyB0aGUgdGFyZ2V0cyBvZiA8Y29kZT4qdGhpczwvY29kZT4gYW5kIDxjb2RlPmY8L2NvZGU+Ljwvc2ltcGFyYT48L2VmZmVjdHM+CisgICAgICA8L21ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJjbGVhciI+CisgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+CisgICAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9tZXRob2QtZ3JvdXA+CisKKyAgICA8bWV0aG9kLWdyb3VwIG5hbWU9ImNhcGFjaXR5Ij4KKyAgICAgIDxtZXRob2QgbmFtZT0iZW1wdHkiIGN2PSJjb25zdCI+CisgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50aGlzPC9jb2RlPiBoYXMgYSB0YXJnZXQsIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L21ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJjb252ZXJzaW9uLW9wZXJhdG9yIiBjdj0iY29uc3QiPgorICAgICAgICA8dHlwZT5zYWZlX2Jvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPkEgPGNvZGU+c2FmZV9ib29sPC9jb2RlPiB0aGF0IGV2YWx1YXRlcyA8Y29kZT5mYWxzZTwvY29kZT4gaW4gYSBib29sZWFuIGNvbnRleHQgd2hlbiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4sIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L21ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvciEiIGN2PSJjb25zdCI+CisgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPjwvc2ltcGFyYT48L3JldHVybnM+CisgICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9tZXRob2QtZ3JvdXA+CisKKyAgICA8bWV0aG9kLWdyb3VwIG5hbWU9InRhcmdldCBhY2Nlc3MiPgorICAgICAgPG92ZXJsb2FkZWQtbWV0aG9kIG5hbWU9InRhcmdldCI+CisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPiAKKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5GdW5jdG9yKjwvdHlwZT4KKyAgICAgICAgPC9zaWduYXR1cmU+CisgICAgICAgIDxzaWduYXR1cmUgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dGVtcGxhdGU+IAorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPmNvbnN0IEZ1bmN0b3IqPC90eXBlPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5JZiA8Y29kZT50aGlzPC9jb2RlPiBzdG9yZXMgYSB0YXJnZXQgb2YgdHlwZQorICAgICAgICA8Y29kZT5GdW5jdG9yPC9jb2RlPiwgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgdGFyZ2V0LiBPdGhlcndpc2UsIHJldHVybnMgdGhlIE5VTEwKKyAgICAgICAgcG9pbnRlci48L3NpbXBhcmE+PC9yZXR1cm5zPgorCisgICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgICAgPC9vdmVybG9hZGVkLW1ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJjb250YWlucyIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+CisgICAgICAgICAgPHBhcmFtdHlwZT5jb25zdCBGdW5jdG9yJmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnRydWU8L2NvZGU+IGlmIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPnRhcmdldDwvbWV0aG9kbmFtZT4mbHQ7RnVuY3RvciZndDsoKTwvY29kZT4gaXMgbm9uLU5VTEwgYW5kIDxjb2RlPjxmdW5jdGlvbm5hbWU+ZnVuY3Rpb25fZXF1YWw8L2Z1bmN0aW9ubmFtZT4oKih0aGlzLSZndDt0YXJnZXQmbHQ7RnVuY3RvciZndDsoKSksIGYpPC9jb2RlPjwvc2ltcGFyYT48L3JldHVybnM+CisgCisgICAgICA8L21ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJ0YXJnZXRfdHlwZSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgPHR5cGU+Y29uc3Qgc3RkOjp0eXBlX2luZm8mYW1wOzwvdHlwZT4KKyAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+PGNvZGU+dHlwZWlkPC9jb2RlPiBvZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdCwgb3IgPGNvZGU+dHlwZWlkKHZvaWQpPC9jb2RlPiBpZiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4uPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L21ldGhvZD4KKworICAgIDwvbWV0aG9kLWdyb3VwPgorCisgICAgPG1ldGhvZC1ncm91cCBuYW1lPSJpbnZvY2F0aW9uIj4KKyAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgPHR5cGU+cmVzdWx0X3R5cGU8L3R5cGU+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iYTEiPjxwYXJhbXR5cGU+YXJnMV90eXBlPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iYTIiPjxwYXJhbXR5cGU+YXJnMl90eXBlPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxwYXJhbWV0ZXI+PHBhcmFtdHlwZT4uLi48L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJhTiI+PHBhcmFtdHlwZT5hcmdOX3R5cGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPGVmZmVjdHM+PHNpbXBhcmE+PGNvZGU+ZihhMSwgYTIsIC4uLiwgYU4pPC9jb2RlPiwgd2hlcmUgPGNvZGU+ZjwvY29kZT4gaXMgdGhlIHRhcmdldCBvZiA8Y29kZT4qdGhpczwvY29kZT4uPC9zaW1wYXJhPjwvZWZmZWN0cz4KKyAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+aWYgPGNvZGU+UjwvY29kZT4gaXMgPGNvZGU+dm9pZDwvY29kZT4sIG5vdGhpbmcgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbCB0byA8Y29kZT5mPC9jb2RlPiBpcyByZXR1cm5lZC48L3NpbXBhcmE+PC9yZXR1cm5zPgorICAgICAgICA8dGhyb3dzPjxzaW1wYXJhPjxjb2RlPjxjbGFzc25hbWU+YmFkX2Z1bmN0aW9uX2NhbGw8L2NsYXNzbmFtZT48L2NvZGU+IGlmIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi4gT3RoZXJ3aXNlLCBtYXkgdGhyb3VnaCBhbnkgZXhjZXB0aW9uIHRocm93biBieSB0aGUgdGFyZ2V0IGZ1bmN0aW9uIDxjb2RlPmY8L2NvZGU+Ljwvc2ltcGFyYT48L3Rocm93cz4KKyAgICAgIDwvbWV0aG9kPgorICAgIDwvbWV0aG9kLWdyb3VwPgorCisgICAgPGZyZWUtZnVuY3Rpb24tZ3JvdXAgbmFtZT0ic3BlY2lhbGl6ZWQgYWxnb3JpdGhtcyI+CisgICAgICA8ZnVuY3Rpb24gbmFtZT0ic3dhcCI+CisgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KKyAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KKyAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+CisgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+CisgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjEiPjxwYXJhbXR5cGU+PGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjIiPjxwYXJhbXR5cGU+PGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPjxjb2RlPmYxLjxtZXRob2RuYW1lPnN3YXA8L21ldGhvZG5hbWU+KGYyKTwvY29kZT48L3NpbXBhcmE+PC9lZmZlY3RzPgorICAgICAgPC9mdW5jdGlvbj4KKyAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+CisKKyAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJjb21wYXJpc29uIG9wZXJhdG9ycyI+CisgICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJvcGVyYXRvcj09Ij4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPkZ1bmN0b3I8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPkZ1bmN0b3I8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1QxLCBUMiwgLi4uLCBUTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMSIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQyIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVE4iLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1QxLCBUMiwgLi4uLCBUTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4gICAgICAgIAorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMSIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQyIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVE4iLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJVMSIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlUyIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVU4iLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMSI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZsdDtUMSwgVDIsIC4uLiwgVE4mZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYyIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1UxLCBVMiwgLi4uLCBVTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5UcnVlIHdoZW4gPGNvZGU+ZjwvY29kZT4gc3RvcmVzIGFuIG9iamVjdCBvZgorICAgICAgICB0eXBlIDxjb2RlPkZ1bmN0b3I8L2NvZGU+IGFuZCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGxpZXM6CisgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKworICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxjb2RlPmc8L2NvZGU+IGlzIG9mIHR5cGUKKyAgICAgICAgICAgIDxjb2RlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L2NvZGU+CisgICAgICAgICAgICBhbmQgPGNvZGU+Zi50YXJnZXQmbHQ7RnVuY3RvciZndDsoKSA9PSBnLjxtZXRob2RuYW1lCisgICAgICAgICAgICBhbHQ9InJlZmVyZW5jZV93cmFwcGVyOjpnZXRfcG9pbnRlciI+Z2V0X3BvaW50ZXI8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L2xpc3RpdGVtPgorCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+PGNvZGU+ZzwvY29kZT4gaXMgbm90IG9mIHR5cGUKKyAgICAgICAgICAgIDxjb2RlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L2NvZGU+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxjb2RlPjxmdW5jdGlvbm5hbWU+ZnVuY3Rpb25fZXF1YWw8L2Z1bmN0aW9ubmFtZT4oKihmLnRhcmdldCZsdDtGdW5jdG9yJmd0OygpKSwKKyAgICAgICAgICAgIGcpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KKworICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDwvc2ltcGFyYT48L3JldHVybnM+CisKKyAgICAgICAgPG5vdGVzPjxzaW1wYXJhPjxjb2RlPjxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+PC9jb2RlPgorICAgICAgICBvYmplY3RzIGFyZSBub3QKKyAgICAgICAgPGNvbmNlcHRuYW1lPkVxdWFsaXR5Q29tcGFyYWJsZTwvY29uY2VwdG5hbWU+Ljwvc2ltcGFyYT48L25vdGVzPgorCisgICAgICAgIDxyYXRpb25hbGU+PHNpbXBhcmE+VGhlIDxjb2RlPnNhZmVfYm9vbDwvY29kZT4gY29udmVyc2lvbgorICAgICAgICBvcGVucyBhIGxvb3Bob2xlIHdoZXJlYnkgdHdvIDxjb2RlPmZ1bmN0aW9uTjwvY29kZT4KKyAgICAgICAgaW5zdGFuY2VzIGNhbiBiZSBjb21wYXJlZCB2aWEgPGNvZGU+PT08L2NvZGU+LCBhbHRob3VnaCB0aGlzCisgICAgICAgIGlzIG5vdCBmZWFzaWJsZSB0byBpbXBsZW1lbnQuIFRoZSB1bmRlZmluZWQgPGNvZGU+dm9pZAorICAgICAgICBvcGVyYXRvcj09PC9jb2RlPiBjbG9zZXMgdGhlIGxvb3Bob2xlIGFuZCBlbnN1cmVzIGEKKyAgICAgICAgY29tcGlsZS10aW1lIG9yIGxpbmstdGltZSBlcnJvci48L3NpbXBhcmE+PC9yYXRpb25hbGU+CisgICAgICA8L292ZXJsb2FkZWQtZnVuY3Rpb24+CisKKyAgICAgIDxvdmVybG9hZGVkLWZ1bmN0aW9uIG5hbWU9Im9wZXJhdG9yIT0iPgorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMSIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQyIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdmFyYXJncy8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVE4iLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZsdDtUMSwgVDIsIC4uLiwgVE4mZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZsdDtUMSwgVDIsIC4uLiwgVE4mZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+ICAgICAgICAKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDEiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUMiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXZhcmFyZ3MvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlROIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJnIj48cGFyYW10eXBlPjxjbGFzc25hbWU+cmVmZXJlbmNlX3dyYXBwZXI8L2NsYXNzbmFtZT4mbHQ7RnVuY3RvciZndDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VDEsIFQyLCAuLi4sIFROJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQxIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVDIiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUTiIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlUxIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVTIiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS12YXJhcmdzLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJVTiIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYxIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1QxLCBUMiwgLi4uLCBUTiZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjIiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mbHQ7VTEsIFUyLCAuLi4sIFVOJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPlRydWUgd2hlbiA8Y29kZT5mPC9jb2RlPiBkb2VzIG5vdCBzdG9yZSBhbgorICAgICAgICBvYmplY3Qgb2YgdHlwZSA8Y29kZT5GdW5jdG9yPC9jb2RlPiBvciBpdCBzdG9yZXMgYW4gb2JqZWN0IG9mCisgICAgICAgIHR5cGUgPGNvZGU+RnVuY3RvcjwvY29kZT4gYW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgICAgICAgYXBwbGllczoKKyAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+PGNvZGU+ZzwvY29kZT4gaXMgb2YgdHlwZQorICAgICAgICAgICAgPGNvZGU+PGNsYXNzbmFtZT5yZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPiZsdDtGdW5jdG9yJmd0OzwvY29kZT4KKyAgICAgICAgICAgIGFuZCA8Y29kZT5mLnRhcmdldCZsdDtGdW5jdG9yJmd0OygpICE9IGcuPG1ldGhvZG5hbWUKKyAgICAgICAgICAgIGFsdD0icmVmZXJlbmNlX3dyYXBwZXI6OmdldF9wb2ludGVyIj5nZXRfcG9pbnRlcjwvbWV0aG9kbmFtZT4oKTwvY29kZT4uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisKKyAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT48Y29kZT5nPC9jb2RlPiBpcyBub3Qgb2YgdHlwZQorICAgICAgICAgICAgPGNvZGU+PGNsYXNzbmFtZT5yZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPiZsdDtGdW5jdG9yJmd0OzwvY29kZT4KKyAgICAgICAgICAgIGFuZCA8Y29kZT4hPGZ1bmN0aW9ubmFtZT5mdW5jdGlvbl9lcXVhbDwvZnVuY3Rpb25uYW1lPigqKGYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkpLCBnKTwvY29kZT4uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisKKyAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8L3NpbXBhcmE+PC9yZXR1cm5zPgorCisgICAgICAgIDxub3Rlcz48c2ltcGFyYT48Y29kZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPjwvY29kZT4KKyAgICAgICAgb2JqZWN0cyBhcmUgbm90CisgICAgICAgIDxjb25jZXB0bmFtZT5FcXVhbGl0eUNvbXBhcmFibGU8L2NvbmNlcHRuYW1lPi48L3NpbXBhcmE+PC9ub3Rlcz4KKworICAgICAgICA8cmF0aW9uYWxlPjxzaW1wYXJhPlRoZSA8Y29kZT5zYWZlX2Jvb2w8L2NvZGU+IGNvbnZlcnNpb24KKyAgICAgICAgb3BlbnMgYSBsb29waG9sZSB3aGVyZWJ5IHR3byA8Y29kZT5mdW5jdGlvbk48L2NvZGU+CisgICAgICAgIGluc3RhbmNlcyBjYW4gYmUgY29tcGFyZWQgdmlhIDxjb2RlPiE9PC9jb2RlPiwgYWx0aG91Z2ggdGhpcworICAgICAgICBpcyBub3QgZmVhc2libGUgdG8gaW1wbGVtZW50LiBUaGUgdW5kZWZpbmVkIDxjb2RlPnZvaWQKKyAgICAgICAgb3BlcmF0b3IhPTwvY29kZT4gY2xvc2VzIHRoZSBsb29waG9sZSBhbmQgZW5zdXJlcyBhCisgICAgICAgIGNvbXBpbGUtdGltZSBvciBsaW5rLXRpbWUgZXJyb3IuPC9zaW1wYXJhPjwvcmF0aW9uYWxlPgorICAgICAgPC9vdmVybG9hZGVkLWZ1bmN0aW9uPgorICAgIDwvZnJlZS1mdW5jdGlvbi1ncm91cD4KKyAgPC9jbGFzcz4KKworICA8Y2xhc3MgbmFtZT0iZnVuY3Rpb24iPgorICAgIDx0ZW1wbGF0ZT4KKyAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiPgorICAgICAgICA8cHVycG9zZT5GdW5jdGlvbiB0eXBlIFIgKFQxLCBUMiwgLi4uLCBUTik8L3B1cnBvc2U+CisgICAgICA8L3RlbXBsYXRlLXR5cGUtcGFyYW1ldGVyPgorICAgIDwvdGVtcGxhdGU+CisgICAgPGluaGVyaXQgYWNjZXNzPSJwdWJsaWMiPjxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+Jmx0O1IsIFQxLCBUMiwgLi4uLCBUTiZndDs8L2luaGVyaXQ+CisKKyAgICA8cHVycG9zZT5BIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IKKyAgICBjYWxsYmFja3Mgb3Igd3JhcHBpbmcgZnVuY3Rpb24gb2JqZWN0cy48L3B1cnBvc2U+CisKKyAgICA8ZGVzY3JpcHRpb24+CisgICAgICA8cGFyYT5DbGFzcyB0ZW1wbGF0ZSA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+IGlzIGEgdGhpbgorICAgICAgd3JhcHBlciBhcm91bmQgdGhlIG51bWJlcmVkIGNsYXNzIHRlbXBsYXRlcyA8Y2xhc3NuYW1lCisgICAgICBhbHQ9ImZ1bmN0aW9uTiI+ZnVuY3Rpb24wPC9jbGFzc25hbWU+LCA8Y2xhc3NuYW1lCisgICAgICBhbHQ9ImZ1bmN0aW9uTiI+ZnVuY3Rpb24xPC9jbGFzc25hbWU+LCBldGMuIEl0IGFjY2VwdHMgYQorICAgICAgZnVuY3Rpb24gdHlwZSB3aXRoIE4gYXJndW1lbnRzIGFuZCB3aWxsIHdpbGwgZGVyaXZlIGZyb20KKyAgICAgIDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+IGluc3RhbnRpYXRlZCB3aXRoIHRoZSBhcmd1bWVudHMKKyAgICAgIGl0IHJlY2VpdmVzLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIHNlbWFudGljcyBvZiBhbGwgb3BlcmF0aW9ucyBpbiBjbGFzcyB0ZW1wbGF0ZQorICAgICAgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiBhcmUgZXF1aXZhbGVudCB0byB0aGF0IG9mIHRoZQorICAgICAgdW5kZXJseWluZyA8Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiBvYmplY3QsIGFsdGhvdWdoCisgICAgICBhZGRpdGlvbmFsIG1lbWJlciBmdW5jdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGFsbG93IHByb3BlciBjb3B5CisgICAgICBjb25zdHJ1Y3Rpb24gYW5kIGNvcHkgYXNzaWdubWVudCBvZiBmdW5jdGlvbiBvYmplY3RzLjwvcGFyYT4KKyAgICA8L2Rlc2NyaXB0aW9uPgorCisgICAgPHR5cGVkZWYgbmFtZT0icmVzdWx0X3R5cGUiPjx0eXBlPlI8L3R5cGU+PC90eXBlZGVmPgorICAgIDx0eXBlZGVmIG5hbWU9ImFyZ3VtZW50X3R5cGUiPgorICAgICAgPHR5cGU+VDE8L3R5cGU+PHB1cnBvc2U+SWYgTiA9PSAxPC9wdXJwb3NlPgorICAgIDwvdHlwZWRlZj4KKyAgICA8dHlwZWRlZiBuYW1lPSJmaXJzdF9hcmd1bWVudF90eXBlIj4KKyAgICAgIDx0eXBlPlQxPC90eXBlPgorICAgICAgPHB1cnBvc2U+SWYgTiA9PSAyPC9wdXJwb3NlPgorICAgIDwvdHlwZWRlZj4KKyAgICA8dHlwZWRlZiBuYW1lPSJzZWNvbmRfYXJndW1lbnRfdHlwZSI+CisgICAgICA8dHlwZT5UMjwvdHlwZT4KKyAgICAgIDxwdXJwb3NlPklmIE4gPT0gMjwvcHVycG9zZT4KKyAgICA8L3R5cGVkZWY+CisgICAgPHR5cGVkZWYgbmFtZT0iYXJnMV90eXBlIj48dHlwZT5UMTwvdHlwZT48L3R5cGVkZWY+CisgICAgPHR5cGVkZWYgbmFtZT0iYXJnMl90eXBlIj48dHlwZT5UMjwvdHlwZT48L3R5cGVkZWY+CisgICAgPHR5cGVkZWYgbmFtZT0iLi4uIj48dHlwZS8+PC90eXBlZGVmPgorICAgIDx0eXBlZGVmIG5hbWU9ImFyZ05fdHlwZSI+PHR5cGU+VE48L3R5cGU+PC90eXBlZGVmPgorCisgICAgPHN0YXRpYy1jb25zdGFudCBuYW1lPSJhcml0eSI+CisgICAgICA8dHlwZT5pbnQ8L3R5cGU+CisgICAgICA8ZGVmYXVsdD5OPC9kZWZhdWx0PgorICAgIDwvc3RhdGljLWNvbnN0YW50PgorCisgICAgPHN0cnVjdCBuYW1lPSJzaWciPgorICAgICAgPHRlbXBsYXRlPgorICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQXJncyIvPgorICAgICAgPC90ZW1wbGF0ZT4KKworICAgICAgPHB1cnBvc2U+CisgICAgICAgIDxzaW1wYXJhPjxsaWJyYXJ5bmFtZT5MYW1iZGE8L2xpYnJhcnluYW1lPiBsaWJyYXJ5IHN1cHBvcnQ8L3NpbXBhcmE+CisgICAgICA8L3B1cnBvc2U+CisKKyAgICAgIDx0eXBlZGVmIG5hbWU9InR5cGUiPjx0eXBlPnJlc3VsdF90eXBlPC90eXBlPjwvdHlwZWRlZj4KKyAgICA8L3N0cnVjdD4KKworICAgIDxjb25zdHJ1Y3Rvcj4KKyAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT48Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgIDwvY29uc3RydWN0b3I+CisKKyAgICA8Y29uc3RydWN0b3I+CisgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgorICAgICAgICA8cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb25OPC9jbGFzc25hbWU+JmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgPHBvc3Rjb25kaXRpb25zPjxzaW1wYXJhPkNvbnRhaW5zIGEgY29weSBvZiB0aGUgPGNvZGU+ZjwvY29kZT4ncyB0YXJnZXQsIGlmIGl0IGhhcyBvbmUsIG9yIGlzIGVtcHR5IGlmIDxjb2RlPmYuPG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgorICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdyB1bmxlc3MgY29weWluZyB0aGUgdGFyZ2V0IG9mIDxjb2RlPmY8L2NvZGU+IHRocm93cy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgPC9jb25zdHJ1Y3Rvcj4KKyAgICAgICAgCisgICAgPGNvbnN0cnVjdG9yPgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KKyAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7JmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkMrKzExIGNvbXBhdGlibGUgY29tcGlsZXIuPC9zaW1wYXJhPjwvcmVxdWlyZXM+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+TW92ZXMgdGhlIHZhbHVlIGZyb20gPGNvZGU+ZjwvY29kZT4gdG8gPGNvZGU+KnRoaXM8L2NvZGU+LiBJZiB0aGUgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCBpdHMgYnVmZmVyIHdpbGwgYmUgYXNzaWduZWQgdG8gPGNvZGU+KnRoaXM8L2NvZGU+IGxlYXZpbmcgYXJndW1lbnQgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHVubGVzcyBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgbm90IG9uIHRoZSBoZWFwIGFuZCBjb3B5aW5nIHRoZSB0YXJnZXQgb2YgPGNvZGU+ZjwvY29kZT4gdGhyb3dzLjwvc2ltcGFyYT48L3Rocm93cz4KKyAgICA8L2NvbnN0cnVjdG9yPgorICAgIAorICAgIDxjb25zdHJ1Y3Rvcj4KKyAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+CisgICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZhbXA7PC9wYXJhbXR5cGU+CisgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Db250YWlucyBhIGNvcHkgb2YgdGhlIDxjb2RlPmY8L2NvZGU+J3MgdGFyZ2V0LCBpZiBpdCBoYXMgb25lLCBvciBpcyBlbXB0eSBpZiA8Y29kZT5mLjxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgIDwvY29uc3RydWN0b3I+CisKKyAgICA8Y29uc3RydWN0b3I+CisgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgorICAgICAgICA8cGFyYW10eXBlPjxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mYW1wOyZhbXA7PC9wYXJhbXR5cGU+CisgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgIDxyZXF1aXJlcz48c2ltcGFyYT5DKysxMSBjb21wYXRpYmxlIGNvbXBpbGVyLjwvc2ltcGFyYT48L3JlcXVpcmVzPgorICAgICAgPHBvc3Rjb25kaXRpb25zPjxzaW1wYXJhPk1vdmVzIHRoZSB2YWx1ZSBmcm9tIDxjb2RlPmY8L2NvZGU+IHRvIDxjb2RlPip0aGlzPC9jb2RlPi4gSWYgdGhlIGFyZ3VtZW50IGhhcyBpdHMgZnVuY3Rpb24gb2JqZWN0IGFsbG9jYXRlZCBvbiB0aGUgaGVhcCwgaXRzIGJ1ZmZlciB3aWxsIGJlIGFzc2lnbmVkIHRvIDxjb2RlPip0aGlzPC9jb2RlPiBsZWF2aW5nIGFyZ3VtZW50IGVtcHR5Ljwvc2ltcGFyYT48L3Bvc3Rjb25kaXRpb25zPgorICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdyB1bmxlc3MgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG5vdCBvbiB0aGUgaGVhcCBhbmQgY29weWluZyB0aGUgdGFyZ2V0IG9mIDxjb2RlPmY8L2NvZGU+IHRocm93cy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgPC9jb25zdHJ1Y3Rvcj4KKyAgICAKKyAgICA8Y29uc3RydWN0b3I+CisgICAgICA8dGVtcGxhdGU+CisgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGIi8+CisgICAgICA8L3RlbXBsYXRlPgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPkY8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgIDxyZXF1aXJlcz48c2ltcGFyYT5GIGlzIGEgZnVuY3Rpb24gb2JqZWN0IENhbGxhYmxlIGZyb20gPGNvZGU+dGhpczwvY29kZT4uPC9zaW1wYXJhPjwvcmVxdWlyZXM+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+KnRoaXM8L2NvZGU+IHRhcmdldHMgYSBjb3B5IG9mIDxjb2RlPmY8L2NvZGU+IGlmIDxjb2RlPmY8L2NvZGU+IGlzIG5vbmVtcHR5LCBvciA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4gaWYgPGNvZGU+ZjwvY29kZT4gaXMgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgPC9jb25zdHJ1Y3Rvcj4KKworICAgIDxjb25zdHJ1Y3Rvcj4KKyAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkYiLz4KKyAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkFsbG9jYXRvciIvPgorICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5GPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICA8cGFyYW1ldGVyIG5hbWU9ImFsbG9jIj48cGFyYW10eXBlPkFsbG9jYXRvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkYgaXMgYSBmdW5jdGlvbiBvYmplY3QgQ2FsbGFibGUgZnJvbSA8Y29kZT50aGlzPC9jb2RlPiwgQWxsb2NhdG9yIGlzIGFuIGFsbG9jYXRvci4gVGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3Igb2YgQWxsb2NhdG9yIHNoYWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC9yZXF1aXJlcz4KKyAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT48Y29kZT4qdGhpczwvY29kZT4gdGFyZ2V0cyBhIGNvcHkgb2YgPGNvZGU+ZjwvY29kZT4gaWYgPGNvZGU+ZjwvY29kZT4gaXMgbm9uZW1wdHksIG9yIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPiBpZiA8Y29kZT5mPC9jb2RlPiBpcyBlbXB0eS48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKworICAgICAgPGVmZmVjdHM+PHNpbXBhcmE+SWYgbWVtb3J5IGFsbG9jYXRpb24gaXMgcmVxdWlyZWQsIHRoZSBnaXZlbiBhbGxvY2F0b3IgKG9yIGEgY29weSBvZiBpdCkgd2lsbCBiZSB1c2VkIHRvIGFsbG9jYXRlIHRoYXQgbWVtb3J5Ljwvc2ltcGFyYT48L2VmZmVjdHM+CisgICAgPC9jb25zdHJ1Y3Rvcj4KKworICAgIDxkZXN0cnVjdG9yPgorICAgICAgPGVmZmVjdHM+PHNpbXBhcmE+SWYgPGNvZGU+IXRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPiwgZGVzdHJveXMgdGhlIHRhcmdldCBvZiA8Y29kZT50aGlzPC9jb2RlPi48L3NpbXBhcmE+PC9lZmZlY3RzPgorCisgICAgPC9kZXN0cnVjdG9yPgorCisgICAgPGNvcHktYXNzaWdubWVudD4KKyAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+CisgICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbk48L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPgorICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+SWYgY29weSBjb25zdHJ1Y3Rpb24gZG9lcyBub3QgdGhyb3csIDxjb2RlPip0aGlzPC9jb2RlPiB0YXJnZXRzIGEgY29weSBvZiA8Y29kZT5mPC9jb2RlPidzIHRhcmdldCwgaWYgaXQgaGFzIG9uZSwgb3IgaXMgZW1wdHkgaWYgPGNvZGU+Zi48bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4uIElmIGNvcHkgY29uc3RydWN0aW9uIGRvZXMgdGhyb3csIDxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICA8L2NvcHktYXNzaWdubWVudD4KKyAgICAKKyAgICA8Y29weS1hc3NpZ25tZW50PgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KKyAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uTjwvY2xhc3NuYW1lPiZhbXA7JmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgPHJlcXVpcmVzPjxzaW1wYXJhPkMrKzExIGNvbXBhdGlibGUgY29tcGlsZXIuPC9zaW1wYXJhPjwvcmVxdWlyZXM+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+TW92ZXMgdGhlIHZhbHVlIGZyb20gPGNvZGU+ZjwvY29kZT4gdG8gPGNvZGU+KnRoaXM8L2NvZGU+LiBJZiB0aGUgYXJndW1lbnQgaGFzIGl0cyBmdW5jdGlvbiBvYmplY3QgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCBpdHMgYnVmZmVyIHdpbGwgYmUgYXNzaWduZWQgdG8gPGNvZGU+KnRoaXM8L2NvZGU+IGxlYXZpbmcgYXJndW1lbnQgZW1wdHkuPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHVubGVzcyBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgbm90IG9uIHRoZSBoZWFwIGFuZCBjb3B5aW5nIHRoZSB0YXJnZXQgb2YgPGNvZGU+ZjwvY29kZT4gdGhyb3dzLjwvc2ltcGFyYT48L3Rocm93cz4KKyAgICA8L2NvcHktYXNzaWdubWVudD4KKworICAgIDxjb3B5LWFzc2lnbm1lbnQ+CisgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgorICAgICAgICA8cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPgorICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+SWYgY29weSBjb25zdHJ1Y3Rpb24gb2YgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiBkb2VzIG5vdCB0aHJvdywgPGNvZGU+KnRoaXM8L2NvZGU+IHRhcmdldHMgYSBjb3B5IG9mIDxjb2RlPmY8L2NvZGU+J3MgdGFyZ2V0LCBpZiBpdCBoYXMgb25lLCBvciBpcyBlbXB0eSBpZiA8Y29kZT5mLjxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPi4gPC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93IHdoZW4gdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiBpcyBhIHN0YXRlbGVzcyBmdW5jdGlvbiBvYmplY3Qgb3IgYSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdC4gSWYgY29weSBjb25zdHJ1Y3Rpb24gZG9lcyB0aHJvdywgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L3Rocm93cz4KKyAgICA8L2NvcHktYXNzaWdubWVudD4KKyAgICAKKyAgICA8Y29weS1hc3NpZ25tZW50PgorICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj4KKyAgICAgICAgPHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+JmFtcDsmYW1wOzwvcGFyYW10eXBlPgorICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICA8cmVxdWlyZXM+PHNpbXBhcmE+QysrMTEgY29tcGF0aWJsZSBjb21waWxlci48L3NpbXBhcmE+PC9yZXF1aXJlcz4KKyAgICAgIDxwb3N0Y29uZGl0aW9ucz48c2ltcGFyYT5Nb3ZlcyB0aGUgdmFsdWUgZnJvbSA8Y29kZT5mPC9jb2RlPiB0byA8Y29kZT4qdGhpczwvY29kZT4uIElmIHRoZSBhcmd1bWVudCBoYXMgaXRzIGZ1bmN0aW9uIG9iamVjdCBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIGl0cyBidWZmZXIgd2lsbCBiZSBhc3NpZ25lZCB0byA8Y29kZT4qdGhpczwvY29kZT4gbGVhdmluZyBhcmd1bWVudCBlbXB0eS48L3NpbXBhcmE+PC9wb3N0Y29uZGl0aW9ucz4KKyAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cgdW5sZXNzIGFyZ3VtZW50IGhhcyBpdHMgZnVuY3Rpb24gb2JqZWN0IGFsbG9jYXRlZCBub3Qgb24gdGhlIGhlYXAgYW5kIGNvcHlpbmcgdGhlIHRhcmdldCBvZiA8Y29kZT5mPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgIDwvY29weS1hc3NpZ25tZW50PgorCisgICAgPG1ldGhvZC1ncm91cCBuYW1lPSJtb2RpZmllcnMiPgorICAgICAgPG1ldGhvZCBuYW1lPSJzd2FwIj4KKyAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8ZWZmZWN0cz48c2ltcGFyYT5JbnRlcmNoYW5nZXMgdGhlIHRhcmdldHMgb2YgPGNvZGU+KnRoaXM8L2NvZGU+IGFuZCA8Y29kZT5mPC9jb2RlPi48L3NpbXBhcmE+PC9lZmZlY3RzPgorICAgICAgPC9tZXRob2Q+CisKKyAgICAgIDxtZXRob2QgbmFtZT0iY2xlYXIiPgorICAgICAgICA8dHlwZT52b2lkPC90eXBlPgorICAgICAgICA8cG9zdGNvbmRpdGlvbnM+PHNpbXBhcmE+PGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+PC9zaW1wYXJhPjwvcG9zdGNvbmRpdGlvbnM+CisgICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9tZXRob2QtZ3JvdXA+CisKKyAgICA8bWV0aG9kLWdyb3VwIG5hbWU9ImNhcGFjaXR5Ij4KKyAgICAgIDxtZXRob2QgbmFtZT0iZW1wdHkiIGN2PSJjb25zdCI+CisgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50aGlzPC9jb2RlPiBoYXMgYSB0YXJnZXQsIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L21ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJjb252ZXJzaW9uLW9wZXJhdG9yIiBjdj0iY29uc3QiPgorICAgICAgICA8dHlwZT5zYWZlX2Jvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPkEgPGNvZGU+c2FmZV9ib29sPC9jb2RlPiB0aGF0IGV2YWx1YXRlcyA8Y29kZT5mYWxzZTwvY29kZT4gaW4gYSBib29sZWFuIGNvbnRleHQgd2hlbiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT5lbXB0eTwvbWV0aG9kbmFtZT4oKTwvY29kZT4sIGFuZCA8Y29kZT50cnVlPC9jb2RlPiBvdGhlcndpc2UuPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICAgICAgPHRocm93cz48c2ltcGFyYT5XaWxsIG5vdCB0aHJvdy48L3NpbXBhcmE+PC90aHJvd3M+CisgICAgICA8L21ldGhvZD4KKworICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvciEiIGN2PSJjb25zdCI+CisgICAgICAgIDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnRoaXMtJmd0OzxtZXRob2RuYW1lPmVtcHR5PC9tZXRob2RuYW1lPigpPC9jb2RlPjwvc2ltcGFyYT48L3JldHVybnM+CisgICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9tZXRob2QtZ3JvdXA+CisKKyAgICA8bWV0aG9kLWdyb3VwIG5hbWU9InRhcmdldCBhY2Nlc3MiPgorICAgICAgPG92ZXJsb2FkZWQtbWV0aG9kIG5hbWU9InRhcmdldCI+CisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPiAKKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5GdW5jdG9yKjwvdHlwZT4KKyAgICAgICAgPC9zaWduYXR1cmU+CisgICAgICAgIDxzaWduYXR1cmUgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dGVtcGxhdGU+IAorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkZ1bmN0b3IiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPmNvbnN0IEZ1bmN0b3IqPC90eXBlPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5JZiA8Y29kZT50aGlzPC9jb2RlPiBzdG9yZXMgYSB0YXJnZXQgb2YgdHlwZQorICAgICAgICA8Y29kZT5GdW5jdG9yPC9jb2RlPiwgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgdGFyZ2V0LiBPdGhlcndpc2UsIHJldHVybnMgdGhlIE5VTEwKKyAgICAgICAgcG9pbnRlci48L3NpbXBhcmE+PC9yZXR1cm5zPgorICAgICAgICA8dGhyb3dzPjxzaW1wYXJhPldpbGwgbm90IHRocm93Ljwvc2ltcGFyYT48L3Rocm93cz4KKyAgICAgIDwvb3ZlcmxvYWRlZC1tZXRob2Q+CisKKyAgICAgIDxtZXRob2QgbmFtZT0iY29udGFpbnMiIGN2PSJjb25zdCI+CisgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgorICAgICAgICAgIDxwYXJhbXR5cGU+Y29uc3QgRnVuY3RvciZhbXA7PC9wYXJhbXR5cGU+CisgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICA8cmV0dXJucz48c2ltcGFyYT48Y29kZT50cnVlPC9jb2RlPiBpZiA8Y29kZT50aGlzLSZndDs8bWV0aG9kbmFtZT50YXJnZXQ8L21ldGhvZG5hbWU+Jmx0O0Z1bmN0b3ImZ3Q7KCk8L2NvZGU+IGlzIG5vbi1OVUxMIGFuZCA8Y29kZT48ZnVuY3Rpb25uYW1lPmZ1bmN0aW9uX2VxdWFsPC9mdW5jdGlvbm5hbWU+KCoodGhpcy0mZ3Q7dGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkpLCBmKTwvY29kZT48L3NpbXBhcmE+PC9yZXR1cm5zPgorIAorICAgICAgPC9tZXRob2Q+CisKKyAgICAgIDxtZXRob2QgbmFtZT0idGFyZ2V0X3R5cGUiIGN2PSJjb25zdCI+CisgICAgICAgIDx0eXBlPmNvbnN0IHN0ZDo6dHlwZV9pbmZvJmFtcDs8L3R5cGU+CisgICAgICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPnR5cGVpZDwvY29kZT4gb2YgdGhlIHRhcmdldCBmdW5jdGlvbiBvYmplY3QsIG9yIDxjb2RlPnR5cGVpZCh2b2lkKTwvY29kZT4gaWYgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+Ljwvc2ltcGFyYT48L3JldHVybnM+CisgICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+V2lsbCBub3QgdGhyb3cuPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9tZXRob2QtZ3JvdXA+CisKKyAgICA8bWV0aG9kLWdyb3VwIG5hbWU9Imludm9jYXRpb24iPgorICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICA8dHlwZT5yZXN1bHRfdHlwZTwvdHlwZT4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJhMSI+PHBhcmFtdHlwZT5hcmcxX3R5cGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJhMiI+PHBhcmFtdHlwZT5hcmcyX3R5cGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPHBhcmFtZXRlcj48cGFyYW10eXBlPi4uLjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImFOIj48cGFyYW10eXBlPmFyZ05fdHlwZTwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8ZWZmZWN0cz48c2ltcGFyYT48Y29kZT5mKGExLCBhMiwgLi4uLCBhTik8L2NvZGU+LCB3aGVyZSA8Y29kZT5mPC9jb2RlPiBpcyB0aGUgdGFyZ2V0IG9mIDxjb2RlPip0aGlzPC9jb2RlPi48L3NpbXBhcmE+PC9lZmZlY3RzPgorICAgICAgICA8cmV0dXJucz48c2ltcGFyYT5pZiA8Y29kZT5SPC9jb2RlPiBpcyA8Y29kZT52b2lkPC9jb2RlPiwgbm90aGluZyBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsIHRvIDxjb2RlPmY8L2NvZGU+IGlzIHJldHVybmVkLjwvc2ltcGFyYT48L3JldHVybnM+CisgICAgICAgIDx0aHJvd3M+PHNpbXBhcmE+PGNvZGU+PGNsYXNzbmFtZT5iYWRfZnVuY3Rpb25fY2FsbDwvY2xhc3NuYW1lPjwvY29kZT4gaWYgPGNvZGU+dGhpcy0mZ3Q7PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvZGU+LiBPdGhlcndpc2UsIG1heSB0aHJvdWdoIGFueSBleGNlcHRpb24gdGhyb3duIGJ5IHRoZSB0YXJnZXQgZnVuY3Rpb24gPGNvZGU+ZjwvY29kZT4uPC9zaW1wYXJhPjwvdGhyb3dzPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9tZXRob2QtZ3JvdXA+CisKKyAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJzcGVjaWFsaXplZCBhbGdvcml0aG1zIj4KKyAgICAgIDxmdW5jdGlvbiBuYW1lPSJzd2FwIj4KKyAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KKyAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgPHR5cGU+dm9pZDwvdHlwZT4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMSI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYyIj48cGFyYW10eXBlPjxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7U2lnbmF0dXJlJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxlZmZlY3RzPjxzaW1wYXJhPjxjb2RlPmYxLjxtZXRob2RuYW1lPnN3YXA8L21ldGhvZG5hbWU+KGYyKTwvY29kZT48L3NpbXBhcmE+PC9lZmZlY3RzPgorICAgICAgPC9mdW5jdGlvbj4KKyAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+CisKKyAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJjb21wYXJpc29uIG9wZXJhdG9ycyI+CisgICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJvcGVyYXRvcj09Ij4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUmZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4gICAgICAgIAorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7U2lnbmF0dXJlJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlNpZ25hdHVyZTEiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUyIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT52b2lkPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjEiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUxJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZTImZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+VHJ1ZSB3aGVuIDxjb2RlPmY8L2NvZGU+IHN0b3JlcyBhbiBvYmplY3Qgb2YKKyAgICAgICAgdHlwZSA8Y29kZT5GdW5jdG9yPC9jb2RlPiBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBsaWVzOgorICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisKKyAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT48Y29kZT5nPC9jb2RlPiBpcyBvZiB0eXBlCisgICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgorICAgICAgICAgICAgYW5kIDxjb2RlPmYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkgPT0gZy48bWV0aG9kbmFtZQorICAgICAgICAgICAgYWx0PSJyZWZlcmVuY2Vfd3JhcHBlcjo6Z2V0X3BvaW50ZXIiPmdldF9wb2ludGVyPC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KKworICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxjb2RlPmc8L2NvZGU+IGlzIG5vdCBvZiB0eXBlCisgICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgorICAgICAgICAgICAgYW5kIDxjb2RlPjxmdW5jdGlvbm5hbWU+ZnVuY3Rpb25fZXF1YWxzPC9mdW5jdGlvbm5hbWU+KCooZi50YXJnZXQmbHQ7RnVuY3RvciZndDsoKSksIGcpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KKworICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDwvc2ltcGFyYT48L3JldHVybnM+CisKKyAgICAgICAgPG5vdGVzPjxzaW1wYXJhPjxjb2RlPjxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT48L2NvZGU+CisgICAgICAgIG9iamVjdHMgYXJlIG5vdAorICAgICAgICA8Y29uY2VwdG5hbWU+RXF1YWxpdHlDb21wYXJhYmxlPC9jb25jZXB0bmFtZT4uPC9zaW1wYXJhPjwvbm90ZXM+CisKKyAgICAgICAgPHJhdGlvbmFsZT48c2ltcGFyYT5UaGUgPGNvZGU+c2FmZV9ib29sPC9jb2RlPiBjb252ZXJzaW9uCisgICAgICAgIG9wZW5zIGEgbG9vcGhvbGUgd2hlcmVieSB0d28gPGNvZGU+ZnVuY3Rpb248L2NvZGU+CisgICAgICAgIGluc3RhbmNlcyBjYW4gYmUgY29tcGFyZWQgdmlhIDxjb2RlPj09PC9jb2RlPiwgYWx0aG91Z2ggdGhpcworICAgICAgICBpcyBub3QgZmVhc2libGUgdG8gaW1wbGVtZW50LiBUaGUgdW5kZWZpbmVkIDxjb2RlPnZvaWQKKyAgICAgICAgb3BlcmF0b3I9PTwvY29kZT4gY2xvc2VzIHRoZSBsb29waG9sZSBhbmQgZW5zdXJlcyBhCisgICAgICAgIGNvbXBpbGUtdGltZSBvciBsaW5rLXRpbWUgZXJyb3IuPC9zaW1wYXJhPjwvcmF0aW9uYWxlPgorICAgICAgPC9vdmVybG9hZGVkLWZ1bmN0aW9uPgorCisgICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJvcGVyYXRvciE9Ij4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUmZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iU2lnbmF0dXJlIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRnVuY3RvciIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImciPjxwYXJhbXR5cGU+RnVuY3RvcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4gICAgICAgIAorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZSZndDsmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGdW5jdG9yIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5ib29sPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZyI+PHBhcmFtdHlwZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmIj48cGFyYW10eXBlPmNvbnN0IDxjbGFzc25hbWU+ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7U2lnbmF0dXJlJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPiAgICAgICAgCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlNpZ25hdHVyZTEiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJTaWduYXR1cmUyIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT52b2lkPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZjEiPjxwYXJhbXR5cGU+Y29uc3QgPGNsYXNzbmFtZT5mdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtTaWduYXR1cmUxJmd0OyZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmMiI+PHBhcmFtdHlwZT5jb25zdCA8Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O1NpZ25hdHVyZTImZ3Q7JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHJldHVybnM+PHNpbXBhcmE+VHJ1ZSB3aGVuIDxjb2RlPmY8L2NvZGU+IGRvZXMgbm90IHN0b3JlIGFuCisgICAgICAgIG9iamVjdCBvZiB0eXBlIDxjb2RlPkZ1bmN0b3I8L2NvZGU+IG9yIGl0IHN0b3JlcyBhbiBvYmplY3Qgb2YKKyAgICAgICAgdHlwZSA8Y29kZT5GdW5jdG9yPC9jb2RlPiBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgICAgICBhcHBsaWVzOgorICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisKKyAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT48Y29kZT5nPC9jb2RlPiBpcyBvZiB0eXBlCisgICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgorICAgICAgICAgICAgYW5kIDxjb2RlPmYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkgIT0gZy48bWV0aG9kbmFtZQorICAgICAgICAgICAgYWx0PSJyZWZlcmVuY2Vfd3JhcHBlcjo6Z2V0X3BvaW50ZXIiPmdldF9wb2ludGVyPC9tZXRob2RuYW1lPigpPC9jb2RlPi48L3NpbXBhcmE+PC9saXN0aXRlbT4KKworICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxjb2RlPmc8L2NvZGU+IGlzIG5vdCBvZiB0eXBlCisgICAgICAgICAgICA8Y29kZT48Y2xhc3NuYW1lPnJlZmVyZW5jZV93cmFwcGVyPC9jbGFzc25hbWU+Jmx0O0Z1bmN0b3ImZ3Q7PC9jb2RlPgorICAgICAgICAgICAgYW5kIDxjb2RlPiE8ZnVuY3Rpb25uYW1lPmZ1bmN0aW9uX2VxdWFsczwvZnVuY3Rpb25uYW1lPigqKGYudGFyZ2V0Jmx0O0Z1bmN0b3ImZ3Q7KCkpLCBnKTwvY29kZT4uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisKKyAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8L3NpbXBhcmE+PC9yZXR1cm5zPgorCisgICAgICAgIDxub3Rlcz48c2ltcGFyYT48Y29kZT48Y2xhc3NuYW1lPmZ1bmN0aW9uPC9jbGFzc25hbWU+PC9jb2RlPgorICAgICAgICBvYmplY3RzIGFyZSBub3QKKyAgICAgICAgPGNvbmNlcHRuYW1lPkVxdWFsaXR5Q29tcGFyYWJsZTwvY29uY2VwdG5hbWU+Ljwvc2ltcGFyYT48L25vdGVzPgorCisgICAgICAgIDxyYXRpb25hbGU+PHNpbXBhcmE+VGhlIDxjb2RlPnNhZmVfYm9vbDwvY29kZT4gY29udmVyc2lvbgorICAgICAgICBvcGVucyBhIGxvb3Bob2xlIHdoZXJlYnkgdHdvIDxjb2RlPmZ1bmN0aW9uPC9jb2RlPgorICAgICAgICBpbnN0YW5jZXMgY2FuIGJlIGNvbXBhcmVkIHZpYSA8Y29kZT4hPTwvY29kZT4sIGFsdGhvdWdoIHRoaXMKKyAgICAgICAgaXMgbm90IGZlYXNpYmxlIHRvIGltcGxlbWVudC4gVGhlIHVuZGVmaW5lZCA8Y29kZT52b2lkCisgICAgICAgIG9wZXJhdG9yIT08L2NvZGU+IGNsb3NlcyB0aGUgbG9vcGhvbGUgYW5kIGVuc3VyZXMgYQorICAgICAgICBjb21waWxlLXRpbWUgb3IgbGluay10aW1lIGVycm9yLjwvc2ltcGFyYT48L3JhdGlvbmFsZT4KKyAgICAgIDwvb3ZlcmxvYWRlZC1mdW5jdGlvbj4KKyAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+CisgIDwvY2xhc3M+Cis8L25hbWVzcGFjZT4KKzwvaGVhZGVyPgorCis8aGVhZGVyIG5hbWU9ImJvb3N0L2Z1bmN0aW9uX2VxdWFsLmhwcCI+CisgIDxuYW1lc3BhY2UgbmFtZT0iYm9vc3QiPgorICA8ZnVuY3Rpb24gbmFtZT0iZnVuY3Rpb25fZXF1YWwiPgorICAgIDx0ZW1wbGF0ZT4KKyAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJGIi8+CisgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iRyIvPgorICAgIDwvdGVtcGxhdGU+CisgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICA8cGFyYW1ldGVyIG5hbWU9ImYiPgorICAgICAgPHBhcmFtdHlwZT5jb25zdCBGJmFtcDs8L3BhcmFtdHlwZT4KKyAgICA8L3BhcmFtZXRlcj4KKyAgICA8cGFyYW1ldGVyIG5hbWU9ImciPgorICAgICAgPHBhcmFtdHlwZT5jb25zdCBHJmFtcDs8L3BhcmFtdHlwZT4KKyAgICA8L3BhcmFtZXRlcj4KKyAgICA8cHVycG9zZT48c2ltcGFyYT5Db21wYXJlIHR3byBmdW5jdGlvbiBvYmplY3RzIGZvciBlcXVhbGl0eS48L3NpbXBhcmE+PC9wdXJwb3NlPgorICAgIDxyZXR1cm5zPjxzaW1wYXJhPjxjb2RlPmYgPT0gZzwvY29kZT4uPC9zaW1wYXJhPjwvcmV0dXJucz4KKyAgICA8dGhyb3dzPjxzaW1wYXJhPk9ubHkgaWYgPGNvZGU+ZiA9PSBnPC9jb2RlPiB0aHJvd3MuPC9zaW1wYXJhPjwvdGhyb3dzPgorICA8L2Z1bmN0aW9uPgorICA8L25hbWVzcGFjZT4KKzwvaGVhZGVyPgorPC9saWJyYXJ5LXJlZmVyZW5jZT4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZG9jL3Rlc3RzLnhtbCBiL2xpYnMvZnVuY3Rpb24vZG9jL3Rlc3RzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQ4YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9kb2MvdGVzdHMueG1sCkBAIC0wLDAgKzEsMjU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICAgQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvciAtYXQtIGdtYWlsLmNvbT4KKyAgCisgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisgIC0tPgorPCFET0NUWVBFIGxpYnJhcnkgUFVCTElDICItLy9Cb29zdC8vRFREIEJvb3N0Qm9vayBYTUwgVjEuMC8vRU4iCisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy90b29scy9ib29zdGJvb2svZHRkL2Jvb3N0Ym9vay5kdGQiPgorPHRlc3RzdWl0ZSBpZD0iZnVuY3Rpb24udGVzdHN1aXRlIiBsYXN0LXJldmlzaW9uPSIkRGF0ZTogMjAwNi0xMS0wMyAxMTo0MToxMCAtMDgwMCAoRnJpLCAwMyBOb3YgMjAwNikgJCI+CisgIDxydW4tdGVzdCBmaWxlbmFtZT0iZnVuY3Rpb25fdGVzdC5jcHAiIG5hbWU9ImxpYl9mdW5jdGlvbl90ZXN0Ij4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIDxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+IGNsYXNzIHRlbXBsYXRlLjwvcGFyYT48L3B1cnBvc2U+CisgICAgPGlmLWZhaWxzPjxwYXJhPlRoZSA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiBjbGFzcyB0ZW1wbGF0ZSBtYXkgbm90IGJlIHVzYWJsZSBvbiB5b3VyIGNvbXBpbGVyLiBIb3dldmVyLCB0aGUgbGlicmFyeSBtYXkgc3RpbGwgYmUgdXNhYmxlIHZpYSB0aGUgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb25OPC9jbGFzc25hbWU+IGNsYXNzIHRlbXBsYXRlcy48L3BhcmE+PC9pZi1mYWlscz4KKyAgPC9ydW4tdGVzdD4KKworICA8cnVuLXRlc3QgZmlsZW5hbWU9ImZ1bmN0aW9uX25fdGVzdC5jcHAiPgorICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb25OPC9jbGFzc25hbWU+IGNsYXNzIHRlbXBsYXRlcy48L3BhcmE+PC9wdXJwb3NlPgorICA8L3J1bi10ZXN0PgorCisgIDxydW4tdGVzdCBmaWxlbmFtZT0iYWxsb2NhdG9yX3Rlc3QuY3BwIj4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSB1c2Ugb2YgY3VzdG9tIGFsbG9jYXRvcnMuPC9wYXJhPjwvcHVycG9zZT4KKyAgICA8aWYtZmFpbHM+PHBhcmE+QWxsb2NhdG9ycyBhcmUgaWdub3JlZCBieSB0aGUgaW1wbGVtZW50YXRpb24uPC9wYXJhPjwvaWYtZmFpbHM+CisgIDwvcnVuLXRlc3Q+CisKKyAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJzdGF0ZWxlc3NfdGVzdC5jcHAiPgorICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgdGhlIG9wdGltaXphdGlvbiBvZiBzdGF0ZWxlc3MgZnVuY3Rpb24gb2JqZWN0cyBpbiB0aGUgQm9vc3QuRnVuY3Rpb24gbGlicmFyeS48L3BhcmE+PC9wdXJwb3NlPgorICAgIDxpZi1mYWlscz48cGFyYT5UaGUgZXhjZXB0aW9uLXNhZmV0eSBhbmQgcGVyZm9ybWFuY2UgZ3VhcmFudGVlcyBnaXZlbiBmb3Igc3RhdGVsZXNzIGZ1bmN0aW9uIG9iamVjdHMgbWF5IG5vdCBiZSBtZXQgYnkgdGhlIGltcGxlbWVudGF0aW9uLjwvcGFyYT48L2lmLWZhaWxzPgorICA8L3J1bi10ZXN0PgorCisgIDxydW4tdGVzdCBmaWxlbmFtZT0ibGFtYmRhX3Rlc3QuY3BwIj4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIEJvb3N0LkZ1bmN0aW9uIGFuZCBCb29zdC5MYW1iZGEuPC9wYXJhPjwvcHVycG9zZT4KKyAgICA8aWYtZmFpbHM+PHBhcmE+RWl0aGVyIEJvb3N0LkxhbWJkYSBkb2VzIG5vdCB3b3JrIG9uIHRoZSBwbGF0Zm9ybSwgb3IgQm9vc3QuRnVuY3Rpb24gY2Fubm90IHNhZmVseSBiZSBhcHBsaWVkIHdpdGhvdXQgdGhlIHVzZSBvZiA8ZnVuY3Rpb25uYW1lPmJvb3N0Ojp1bmxhbWJkYTwvZnVuY3Rpb25uYW1lPi48L3BhcmE+PC9pZi1mYWlscz4KKyAgPC9ydW4tdGVzdD4KKworICA8cnVuLXRlc3QgZmlsZW5hbWU9ImNvbnRhaW5zX3Rlc3QuY3BwIj4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBvcGVyYXRpb24gb2YgdGhlCisgICAgPGNvZGU+PG1ldGhvZG5hbWU+dGFyZ2V0PC9tZXRob2RuYW1lPjwvY29kZT4gbWVtYmVyIGZ1bmN0aW9uIGFuZCB0aGUKKyAgICBlcXVhbGl0eSBvcGVyYXRvcnMuPC9wYXJhPjwvcHVycG9zZT4KKyAgPC9ydW4tdGVzdD4KKworICA8Y29tcGlsZS1mYWlsLXRlc3QgZmlsZW5hbWU9ImZ1bmN0aW9uX3Rlc3RfZmFpbDEuY3BwIj4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSAoaW5jb3JyZWN0ISkgdXNlIG9mIGNvbXBhcmlzb25zIGJldHdlZW4gQm9vc3QuRnVuY3Rpb24gZnVuY3Rpb24gb2JqZWN0cy48L3BhcmE+PC9wdXJwb3NlPgorICAgIDxpZi1mYWlscz48cGFyYT5JbnR1aXRpdmUgKGJ1dCBpbmNvcnJlY3QhKSBjb2RlIG1heSBjb21waWxlIGFuZCB3aWxsIGdpdmUgbWVhbmluZ2xlc3MgcmVzdWx0cy48L3BhcmE+PC9pZi1mYWlscz4KKyAgPC9jb21waWxlLWZhaWwtdGVzdD4KKworICA8Y29tcGlsZS1mYWlsLXRlc3QgZmlsZW5hbWU9ImZ1bmN0aW9uX3Rlc3RfZmFpbDIuY3BwIj4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSB1c2Ugb2YgYW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9uIG9iamVjdCB3aXRoIEJvb3N0LkZ1bmN0aW9uPC9wYXJhPjwvcHVycG9zZT4KKyAgICA8aWYtZmFpbHM+PHBhcmE+SW5jb3JyZWN0IGNvZGUgbWF5IGNvbXBpbGUgKHdpdGggcG90ZW50aWFsbHkgdW5leHBlY3RlZCByZXN1bHRzKS48L3BhcmE+PC9pZi1mYWlscz4KKyAgPC9jb21waWxlLWZhaWwtdGVzdD4KKworICA8Y29tcGlsZS10ZXN0IGZpbGVuYW1lPSJmdW5jdGlvbl8zMC5jcHAiPgorICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgdGhlIGdlbmVyYXRpb24gb2YgYSBCb29zdC5GdW5jdGlvbiBmdW5jdGlvbiBvYmplY3QgYWRhcHRvciBhY2NlcHRpbmcgMzAgYXJndW1lbnRzLjwvcGFyYT48L3B1cnBvc2U+CisgICAgPGlmLWZhaWxzPjxwYXJhPlRoZSBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5IG1heSB3b3JrIGZvciBmdW5jdGlvbiBvYmplY3QgYWRhcHRvcnMgb2YgdXAgdG8gMTAgcGFyYW1ldGVycywgYnV0IHdpbGwgYmUgdW5hYmxlIHRvIGdlbmVyYXRlIGFkYXB0b3JzIGZvciBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMuIEZhaWx1cmUgb2Z0ZW4gaW5kaWNhdGVzIGFuIGVycm9yIGluIHRoZSBjb21waWxlcidzIHByZXByb2Nlc3Nvci48L3BhcmE+PC9pZi1mYWlscz4KKyAgPC9jb21waWxlLXRlc3Q+IAorCisgIDxydW4tdGVzdCBmaWxlbmFtZT0iZnVuY3Rpb25fYXJpdGhfY3h4OTguY3BwIj4KKyAgICA8c291cmNlPgorICAgIDwhW0NEQVRBWworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KK11dPgorCis8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5tdWxfaW50cyIvPgorPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuaW50X2RpdiIvPgorCitpbnQgbWFpbigpCit7CisgICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuYXJpdGguY3h4OTgiLz4KKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2VfaW50X2RpdiIvPgorICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNhbGxfaW50X2RpdiIvPgorICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNoZWNrX2VtcHR5Ii8+CisgICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuY2xlYXIiLz4KKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2VfbXVsX2ludHMiLz4KKyAgCisgICAgcmV0dXJuIDA7Cit9Cis8L3NvdXJjZT4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBmaXJzdCB0dXRvcmlhbCBleGFtcGxlLjwvcGFyYT48L3B1cnBvc2U+CisgIDwvcnVuLXRlc3Q+CisKKyAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJmdW5jdGlvbl9hcml0aF9wb3J0YWJsZS5jcHAiPgorICAgIDxzb3VyY2U+CisgICAgPCFbQ0RBVEFbCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorXV0+Cis8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5tdWxfaW50cyIvPgorPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuaW50X2RpdiIvPgoraW50IG1haW4oKQoreworICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmFyaXRoLnBvcnRhYmxlIi8+CisgICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwudXNlX2ludF9kaXYiLz4KKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jYWxsX2ludF9kaXYiLz4KKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jaGVja19lbXB0eSIvPgorICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNsZWFyIi8+CisgICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwudXNlX211bF9pbnRzIi8+CisKKyAgICByZXR1cm4gMDsKK30KKzwvc291cmNlPgorICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgdGhlIGZpcnN0IHR1dG9yaWFsIGV4YW1wbGUuPC9wYXJhPjwvcHVycG9zZT4KKyAgPC9ydW4tdGVzdD4KKworICA8cnVuLXRlc3QgZmlsZW5hbWU9InN1bV9hdmdfY3h4OTguY3BwIj4KKyAgICA8c291cmNlPgorICAgIDwhW0NEQVRBWworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KK11dPgorPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuc3VtX2F2ZyIvPgoraW50IG1haW4oKQoreworICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN1bV9hdmdfZGVjbC5jeHg5OCIvPgorICAgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnVzZV9zdW1fYXZnIi8+CisKKyAgICByZXR1cm4gMDsKK30KKzwvc291cmNlPgorICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgdGhlIHNlY29uZCB0dXRvcmlhbCBleGFtcGxlLjwvcGFyYT48L3B1cnBvc2U+CisgIDwvcnVuLXRlc3Q+CisKKyAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJzdW1fYXZnX3BvcnRhYmxlLmNwcCI+CisgICAgPHNvdXJjZT4KKyAgICA8IVtDREFUQVsKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8aW9zdHJlYW0+CitdXT4KKzxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN1bV9hdmciLz4KK2ludCBtYWluKCkKK3sKKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdW1fYXZnX2RlY2wucG9ydGFibGUiLz4KKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2Vfc3VtX2F2ZyIvPgorCisgICAgcmV0dXJuIDA7Cit9Cis8L3NvdXJjZT4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHRoZSBzZWNvbmQgdHV0b3JpYWwgZXhhbXBsZS48L3BhcmE+PC9wdXJwb3NlPgorICA8L3J1bi10ZXN0PgorCisgIDxydW4tdGVzdCBmaWxlbmFtZT0ibWVtX2Z1bl9jeHg5OC5jcHAiPgorICAgIDxzb3VyY2U+CisgICAgPCFbQ0RBVEFbCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CitdXT4KKzxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLlgiLz4KK2ludCBYOjpmb28oaW50IHgpIHsgcmV0dXJuIC14OyB9CisKK2ludCBtYWluKCkKK3sKKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5tZW1fZnVuLmN4eDk4Ii8+CisKKyAgICByZXR1cm4gMDsKK30KKzwvc291cmNlPiAgICAKKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IG1lbWJlciBmdW5jdGlvbiBleGFtcGxlIGZyb20gdHV0b3JpYWwuPC9wYXJhPjwvcHVycG9zZT4KKyAgPC9ydW4tdGVzdD4KKworICA8cnVuLXRlc3QgZmlsZW5hbWU9Im1lbV9mdW5fcG9ydGFibGUuY3BwIj4KKyAgICA8c291cmNlPgorICAgIDwhW0NEQVRBWworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorXV0+Cis8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5YIi8+CitpbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQorCitpbnQgbWFpbigpCit7CisgICAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubWVtX2Z1bi5wb3J0YWJsZSIvPgorCisgICAgcmV0dXJuIDA7Cit9Cis8L3NvdXJjZT4gICAgCisgICAgPHB1cnBvc2U+PHBhcmE+VGVzdCBtZW1iZXIgZnVuY3Rpb24gZXhhbXBsZSBmcm9tIHR1dG9yaWFsLjwvcGFyYT48L3B1cnBvc2U+CisgIDwvcnVuLXRlc3Q+CisKKyAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJzdGRfYmluZF9jeHg5OC5jcHAiPgorICAgIDxzb3VyY2U+CisgICAgPCFbQ0RBVEFbCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CitdXT4KKzxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLlgiLz4KK2ludCBYOjpmb28oaW50IHgpIHsgcmV0dXJuIC14OyB9CisKK2ludCBtYWluKCkKK3sKKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdGRfYmluZC5jeHg5OCIvPgorCisgICAgcmV0dXJuIDA7Cit9Cis8L3NvdXJjZT4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHN0YW5kYXJkIGJpbmRlcnMgZXhhbXBsZSBmcm9tIHR1dG9yaWFsLjwvcGFyYT48L3B1cnBvc2U+CisgIDwvcnVuLXRlc3Q+CisKKyAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJzdGRfYmluZF9wb3J0YWJsZS5jcHAiPgorICAgIDxzb3VyY2U+CisgICAgPCFbQ0RBVEFbCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CitdXT4KKzxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLlgiLz4KK2ludCBYOjpmb28oaW50IHgpIHsgcmV0dXJuIC14OyB9CisKK2ludCBtYWluKCkKK3sKKyAgICA8c25pcHBldCBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdGRfYmluZC5wb3J0YWJsZSIvPgorCisgICAgcmV0dXJuIDA7Cit9Cis8L3NvdXJjZT4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IHN0YW5kYXJkIGJpbmRlcnMgZXhhbXBsZSBmcm9tIHR1dG9yaWFsLjwvcGFyYT48L3B1cnBvc2U+CisgIDwvcnVuLXRlc3Q+CisKKyAgPHJ1bi10ZXN0IGZpbGVuYW1lPSJmdW5jdGlvbl9yZWZfY3h4OTguY3BwIj4KKyAgICA8c291cmNlPgorPCFbQ0RBVEFbCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorXV0+CisKK3N0cnVjdCBzdGF0ZWZ1bF90eXBlIHsgaW50IG9wZXJhdG9yKCkoaW50KSBjb25zdCB7IHJldHVybiAwOyB9IH07CisKK2ludCBtYWluKCkKK3sKKyAgPHNuaXBwZXQgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwucmVmLmN4eDk4Ii8+CisKKyAgICByZXR1cm4gMDsKK30KKzwvc291cmNlPgorICAgIDxwdXJwb3NlPjxwYXJhPlRlc3QgPGZ1bmN0aW9ubmFtZT5ib29zdDo6cmVmPC9mdW5jdGlvbm5hbWU+IGV4YW1wbGUgZnJvbSB0dXRvcmlhbC48L3BhcmE+PC9wdXJwb3NlPgorICA8L3J1bi10ZXN0PgorCisgIDxydW4tdGVzdCBmaWxlbmFtZT0iZnVuY3Rpb25fcmVmX3BvcnRhYmxlLmNwcCI+CisgICAgPHNvdXJjZT4KKzwhW0NEQVRBWworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KK11dPgorCitzdHJ1Y3Qgc3RhdGVmdWxfdHlwZSB7IGludCBvcGVyYXRvcigpKGludCkgY29uc3QgeyByZXR1cm4gMDsgfSB9OworCitpbnQgbWFpbigpCit7CisgIDxzbmlwcGV0IG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnJlZi5wb3J0YWJsZSIvPgorCisgICAgcmV0dXJuIDA7Cit9Cis8L3NvdXJjZT4KKyAgICA8cHVycG9zZT48cGFyYT5UZXN0IDxmdW5jdGlvbm5hbWU+Ym9vc3Q6OnJlZjwvZnVuY3Rpb25uYW1lPiBleGFtcGxlIGZyb20gdHV0b3JpYWwuPC9wYXJhPjwvcHVycG9zZT4KKyAgPC9ydW4tdGVzdD4KKzwvdGVzdHN1aXRlPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9kb2MvdHV0b3JpYWwueG1sIGIvbGlicy9mdW5jdGlvbi9kb2MvdHV0b3JpYWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjljM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL2RvYy90dXRvcmlhbC54bWwKQEAgLTAsMCArMSwzNjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgorICAKKyAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKyAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAgLS0+Cis8IURPQ1RZUEUgbGlicmFyeSBQVUJMSUMgIi0vL0Jvb3N0Ly9EVEQgQm9vc3RCb29rIFhNTCBWMS4wLy9FTiIKKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL3Rvb2xzL2Jvb3N0Ym9vay9kdGQvYm9vc3Rib29rLmR0ZCI+Cis8c2VjdGlvbiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgaWQ9ImZ1bmN0aW9uLnR1dG9yaWFsIgorICAgICAgICAgbGFzdC1yZXZpc2lvbj0iJERhdGU6IDIwMDktMDctMTIgMDk6MTM6MzUgLTA3MDAgKFN1biwgMTIgSnVsIDIwMDkpICQiPgorPHRpdGxlPlR1dG9yaWFsPC90aXRsZT4KKworPHVzaW5nLW5hbWVzcGFjZSBuYW1lPSJib29zdCIvPgorCis8cGFyYT4gQm9vc3QuRnVuY3Rpb24gaGFzIHR3byBzeW50YWN0aWNhbCBmb3JtczogdGhlIHByZWZlcnJlZCBmb3JtCithbmQgdGhlIHBvcnRhYmxlIGZvcm0uIFRoZSBwcmVmZXJyZWQgZm9ybSBmaXRzIG1vcmUgY2xvc2VseSB3aXRoIHRoZQorQysrIGxhbmd1YWdlIGFuZCByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygc2VwYXJhdGUgdGVtcGxhdGUgcGFyYW1ldGVycwordGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQsIG9mdGVuIGltcHJvdmluZyByZWFkYWJpbGl0eTsgaG93ZXZlciwgdGhlCitwcmVmZXJyZWQgZm9ybSBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMgZHVlIHRvIGNvbXBpbGVyCitidWdzLiBUaGUgY29tcGF0aWJsZSBmb3JtIHdpbGwgd29yayBvbiBhbGwgY29tcGlsZXJzIHN1cHBvcnRlZCBieQorQm9vc3QuRnVuY3Rpb24uIENvbnN1bHQgdGhlIHRhYmxlIGJlbG93IHRvIGRldGVybWluZSB3aGljaCBzeW50YWN0aWMKK2Zvcm0gdG8gdXNlIGZvciB5b3VyIGNvbXBpbGVyLgorCisgIDxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgICAgPHRoZWFkPgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT5QcmVmZXJyZWQgc3ludGF4PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+UG9ydGFibGUgc3ludGF4PC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5HTlUgQysrIDIuOTUueCwgMy4wLnggYW5kIGxhdGVyIHZlcnNpb25zPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5Db21lYXUgQysrIDQuMi40NS4yPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5TR0kgTUlQU3BybyA3LjMuMDwvc2ltcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+SW50ZWwgQysrIDUuMCwgNi4wPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5Db21wYXEncyBjeHggNi4yPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisJICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPk1pY3Jvc29mdCBWaXN1YWwgQysrIDcuMSBhbmQgbGF0ZXIgdmVyc2lvbnM8L3NpbXBhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPjxlbXBoYXNpcz5BbnkgY29tcGlsZXIgc3VwcG9ydGluZyB0aGUgcHJlZmVycmVkIHN5bnRheDwvZW1waGFzaXM+PC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5NaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAsIDcuMDwvc2ltcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+Qm9ybGFuZCBDKysgNS41LjE8L3NpbXBhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPlN1biBXb3JrU2hvcCA2IHVwZGF0ZSAyIEMrKyA1LjM8L3NpbXBhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPk1ldHJvd2Vya3MgQ29kZVdhcnJpb3IgOC4xPC9zaW1wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgIDwvaW5mb3JtYWx0YWJsZT4KKworPC9wYXJhPgorCis8cGFyYT4gSWYgeW91ciBjb21waWxlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhpcyBsaXN0LCBwbGVhc2UgdHJ5IHRoZSBwcmVmZXJyZWQgc3ludGF4IGFuZCByZXBvcnQgeW91ciByZXN1bHRzIHRvIHRoZSBCb29zdCBsaXN0IHNvIHRoYXQgd2UgY2FuIGtlZXAgdGhpcyB0YWJsZSB1cC10by1kYXRlLjwvcGFyYT4KKworPHVzaW5nLWNsYXNzIG5hbWU9ImJvb3N0OjpmdW5jdGlvbiIvPgorCis8c2VjdGlvbj4KKzx0aXRsZT5CYXNpYyBVc2FnZTwvdGl0bGU+IDxwYXJhPiBBIGZ1bmN0aW9uIHdyYXBwZXIgaXMgZGVmaW5lZCBzaW1wbHkKK2J5IGluc3RhbnRpYXRpbmcgdGhlIDxjb21wdXRlcm91dHB1dD5mdW5jdGlvbjwvY29tcHV0ZXJvdXRwdXQ+IGNsYXNzCit0ZW1wbGF0ZSB3aXRoIHRoZSBkZXNpcmVkIHJldHVybiB0eXBlIGFuZCBhcmd1bWVudCB0eXBlcywgZm9ybXVsYXRlZAorYXMgYSBDKysgZnVuY3Rpb24gdHlwZS4gQW55IG51bWJlciBvZiBhcmd1bWVudHMgbWF5IGJlIHN1cHBsaWVkLCB1cCB0bworc29tZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGxpbWl0ICgxMCBpcyB0aGUgZGVmYXVsdCBtYXhpbXVtKS4gVGhlCitmb2xsb3dpbmcgZGVjbGFyZXMgYSBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlcgorPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0PiB0aGF0IHRha2VzIHR3bworPGNvbXB1dGVyb3V0cHV0PmludDwvY29tcHV0ZXJvdXRwdXQ+IHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYQorPGNvbXB1dGVyb3V0cHV0PmZsb2F0PC9jb21wdXRlcm91dHB1dD46CisKKyAgPGluZm9ybWFsdGFibGU+CisgICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICAgICA8dGhlYWQ+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PlByZWZlcnJlZCBzeW50YXg8L2VudHJ5PgorICAgICAgICAgIDxlbnRyeT5Qb3J0YWJsZSBzeW50YXg8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PgorPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmFyaXRoLmN4eDk4Ij48Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtmbG9hdCAoaW50IHgsIGludCB5KSZndDsgZjs8L3Byb2dyYW1saXN0aW5nPgorPC9lbnRyeT4KKzxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5hcml0aC5wb3J0YWJsZSI+PGNsYXNzbmFtZSBhbHQ9ImZ1bmN0aW9uTiI+Ym9vc3Q6OmZ1bmN0aW9uMjwvY2xhc3NuYW1lPiZsdDtmbG9hdCwgaW50LCBpbnQmZ3Q7IGY7PC9wcm9ncmFtbGlzdGluZz4KKzwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgIDwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L2luZm9ybWFsdGFibGU+Cis8L3BhcmE+CisKKzxwYXJhPiBCeSBkZWZhdWx0LCBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlcnMgYXJlIGVtcHR5LCBzbyB3ZSBjYW4gY3JlYXRlIGEgCitmdW5jdGlvbiBvYmplY3QgdG8gYXNzaWduIHRvIDxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD46CisKKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5pbnRfZGl2Ij5zdHJ1Y3QgaW50X2RpdiB7IAorICBmbG9hdCBvcGVyYXRvcigpKGludCB4LCBpbnQgeSkgY29uc3QgeyByZXR1cm4gKChmbG9hdCl4KS95OyB9OyAKK307PC9wcm9ncmFtbGlzdGluZz4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2VfaW50X2RpdiI+ZiA9IGludF9kaXYoKTs8L3Byb2dyYW1saXN0aW5nPgorPC9wYXJhPgorCis8cGFyYT4gTm93IHdlIGNhbiB1c2UgPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0PiB0byBleGVjdXRlCit0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QKKzxjb21wdXRlcm91dHB1dD5pbnRfZGl2PC9jb21wdXRlcm91dHB1dD46CisKKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jYWxsX2ludF9kaXYiPnN0ZDo6Y291dCAmbHQ7Jmx0OyBmKDUsIDMpICZsdDsmbHQ7IHN0ZDo6ZW5kbDs8L3Byb2dyYW1saXN0aW5nPgorPC9wYXJhPgorCis8cGFyYT4gV2UgYXJlIGZyZWUgdG8gYXNzaWduIGFueSBjb21wYXRpYmxlIGZ1bmN0aW9uIG9iamVjdCB0bworPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0Pi4gSWYKKzxjb21wdXRlcm91dHB1dD5pbnRfZGl2PC9jb21wdXRlcm91dHB1dD4gaGFkIGJlZW4gZGVjbGFyZWQgdG8gdGFrZSB0d28KKzxjb21wdXRlcm91dHB1dD5sb25nPC9jb21wdXRlcm91dHB1dD4gb3BlcmFuZHMsIHRoZSBpbXBsaWNpdAorY29udmVyc2lvbnMgd291bGQgaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhlIGFyZ3VtZW50cyB3aXRob3V0IGFueSB1c2VyCitpbnRlcmZlcmVuY2UuIFRoZSBvbmx5IGxpbWl0IG9uIHRoZSB0eXBlcyBvZiBhcmd1bWVudHMgaXMgdGhhdCB0aGV5IGJlCitDb3B5Q29uc3RydWN0aWJsZSwgc28gd2UgY2FuIGV2ZW4gdXNlIHJlZmVyZW5jZXMgYW5kIGFycmF5czoKKworICA8aW5mb3JtYWx0YWJsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjEiIGFsaWduPSJsZWZ0Ij4KKyAgICAgIDx0aGVhZD48cm93PjxlbnRyeT5QcmVmZXJyZWQgc3ludGF4PC9lbnRyeT48L3Jvdz48L3RoZWFkPgorICAgICAgPHRib2R5PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdW1fYXZnX2RlY2wuY3h4OTgiPjxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O3ZvaWQgKGludCB2YWx1ZXNbXSwgaW50IG4sIGludCZhbXA7IHN1bSwgZmxvYXQmYW1wOyBhdmcpJmd0OyBzdW1fYXZnOzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+IAorICA8L2luZm9ybWFsdGFibGU+CisgIDxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29scz0iMSIgYWxpZ249ImxlZnQiPgorICAgICAgPHRoZWFkPjxyb3c+PGVudHJ5PlBvcnRhYmxlIHN5bnRheDwvZW50cnk+PC9yb3c+PC90aGVhZD4KKyAgICAgIDx0Ym9keT4KKyAgICAgICAgPHJvdz4KKzxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdW1fYXZnX2RlY2wucG9ydGFibGUiPjxjbGFzc25hbWUgYWx0PSJmdW5jdGlvbk4iPmJvb3N0OjpmdW5jdGlvbjQ8L2NsYXNzbmFtZT4mbHQ7dm9pZCwgaW50KiwgaW50LCBpbnQmYW1wOywgZmxvYXQmYW1wOyZndDsgc3VtX2F2Zzs8L3Byb2dyYW1saXN0aW5nPgorPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvaW5mb3JtYWx0YWJsZT4KKworPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLnN1bV9hdmciPnZvaWQgZG9fc3VtX2F2ZyhpbnQgdmFsdWVzW10sIGludCBuLCBpbnQmYW1wOyBzdW0sIGZsb2F0JmFtcDsgYXZnKQoreworICBzdW0gPSAwOworICBmb3IgKGludCBpID0gMDsgaSAmbHQ7IG47IGkrKykKKyAgICBzdW0gKz0gdmFsdWVzW2ldOworICBhdmcgPSAoZmxvYXQpc3VtIC8gbjsKK308L3Byb2dyYW1saXN0aW5nPgorCisKKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2Vfc3VtX2F2ZyI+c3VtX2F2ZyA9ICZhbXA7ZG9fc3VtX2F2Zzs8L3Byb2dyYW1saXN0aW5nPgorPC9wYXJhPgorCis8cGFyYT4gSW52b2tpbmcgYSBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciB0aGF0IGRvZXMgbm90IGFjdHVhbGx5Citjb250YWluIGEgZnVuY3Rpb24gb2JqZWN0IGlzIGEgcHJlY29uZGl0aW9uIHZpb2xhdGlvbiwgbXVjaCBsaWtlCit0cnlpbmcgdG8gY2FsbCB0aHJvdWdoIGEgbnVsbCBmdW5jdGlvbiBwb2ludGVyLCBhbmQgd2lsbCB0aHJvdyBhIDxjbGFzc25hbWU+YmFkX2Z1bmN0aW9uX2NhbGw8L2NsYXNzbmFtZT4gZXhjZXB0aW9uKS4gV2UgY2FuIGNoZWNrIGZvciBhbgorZW1wdHkgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXIgYnkgdXNpbmcgaXQgaW4gYSBib29sZWFuIGNvbnRleHQgKGl0IGV2YWx1YXRlcyA8Y29tcHV0ZXJvdXRwdXQ+dHJ1ZTwvY29tcHV0ZXJvdXRwdXQ+IGlmIHRoZSB3cmFwcGVyIGlzIG5vdCBlbXB0eSkgb3IgY29tcGFyZSBpdCBhZ2FpbnN0IDxjb21wdXRlcm91dHB1dD4wPC9jb21wdXRlcm91dHB1dD4uIEZvciBpbnN0YW5jZToKKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5jaGVja19lbXB0eSI+aWYgKGYpCisgIHN0ZDo6Y291dCAmbHQ7Jmx0OyBmKDUsIDMpICZsdDsmbHQ7IHN0ZDo6ZW5kbDsKK2Vsc2UKKyAgc3RkOjpjb3V0ICZsdDsmbHQ7ICJmIGhhcyBubyB0YXJnZXQsIHNvIGl0IGlzIHVuc2FmZSB0byBjYWxsIiAmbHQ7Jmx0OyBzdGQ6OmVuZGw7PC9wcm9ncmFtbGlzdGluZz4KKzwvcGFyYT4KKworPHBhcmE+IEFsdGVybmF0aXZlbHksCis8Y29tcHV0ZXJvdXRwdXQ+PG1ldGhvZG5hbWU+ZW1wdHk8L21ldGhvZG5hbWU+KCk8L2NvbXB1dGVyb3V0cHV0PgorbWV0aG9kIHdpbGwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSB3cmFwcGVyIGlzIGVtcHR5LiAgPC9wYXJhPgorCis8cGFyYT4gRmluYWxseSwgd2UgY2FuIGNsZWFyIG91dCBhIGZ1bmN0aW9uIHRhcmdldCBieSBhc3NpZ25pbmcgaXQgdG8gPGNvbXB1dGVyb3V0cHV0PjA8L2NvbXB1dGVyb3V0cHV0PiBvciBieSBjYWxsaW5nIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+PG1ldGhvZG5hbWU+Y2xlYXI8L21ldGhvZG5hbWU+KCk8L2NvbXB1dGVyb3V0cHV0PiBtZW1iZXIgZnVuY3Rpb24sIGUuZy4sIAorPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNsZWFyIj5mID0gMDs8L3Byb2dyYW1saXN0aW5nPgorPC9wYXJhPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uPgorICA8dGl0bGU+RnJlZSBmdW5jdGlvbnM8L3RpdGxlPgorPHBhcmE+IEZyZWUgZnVuY3Rpb24gcG9pbnRlcnMgY2FuIGJlIGNvbnNpZGVyZWQgc2luZ2xldG9uIGZ1bmN0aW9uIG9iamVjdHMgd2l0aCBjb25zdCBmdW5jdGlvbiBjYWxsIG9wZXJhdG9ycywgYW5kIGNhbiB0aGVyZWZvcmUgYmUgZGlyZWN0bHkgdXNlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlcnM6IAorPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLm11bF9pbnRzIj5mbG9hdCBtdWxfaW50cyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuICgoZmxvYXQpeCkgKiB5OyB9PC9wcm9ncmFtbGlzdGluZz4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC51c2VfbXVsX2ludHMiPmYgPSAmYW1wO211bF9pbnRzOzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3BhcmE+CisKKzxwYXJhPiBOb3RlIHRoYXQgdGhlIDxjb21wdXRlcm91dHB1dD4mYW1wOzwvY29tcHV0ZXJvdXRwdXQ+IGlzbid0IHJlYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXBwZW4gdG8gYmUgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysgdmVyc2lvbiA2LiA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uPgorICA8dGl0bGU+TWVtYmVyIGZ1bmN0aW9uczwvdGl0bGU+CisKKzxwYXJhPiBJbiBtYW55IHN5c3RlbXMsIGNhbGxiYWNrcyBvZnRlbiBjYWxsIHRvIG1lbWJlciBmdW5jdGlvbnMgb2YgYQorcGFydGljdWxhciBvYmplY3QuIFRoaXMgaXMgb2Z0ZW4gcmVmZXJyZWQgdG8gYXMgImFyZ3VtZW50IGJpbmRpbmciLAorYW5kIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgQm9vc3QuRnVuY3Rpb24uIFRoZSB1c2Ugb2YgbWVtYmVyIGZ1bmN0aW9ucworZGlyZWN0bHksIGhvd2V2ZXIsIGlzIHN1cHBvcnRlZCwgc28gdGhlIGZvbGxvd2luZyBjb2RlIGlzIHZhbGlkOgorCis8cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwuWCI+c3RydWN0IFggeworICBpbnQgZm9vKGludCk7Cit9OzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPGluZm9ybWFsdGFibGU+CisgICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICAgICA8dGhlYWQ+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PlByZWZlcnJlZCBzeW50YXg8L2VudHJ5PgorICAgICAgICAgIDxlbnRyeT5Qb3J0YWJsZSBzeW50YXg8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PgorPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLm1lbV9mdW4uY3h4OTgiPjxjbGFzc25hbWU+Ym9vc3Q6OmZ1bmN0aW9uPC9jbGFzc25hbWU+Jmx0O2ludCAoWCosIGludCkmZ3Q7IGY7CisKK2YgPSAmYW1wO1g6OmZvbzsKKyAgCitYIHg7CitmKCZhbXA7eCwgNSk7PC9wcm9ncmFtbGlzdGluZz4KKzwvZW50cnk+Cis8ZW50cnk+Cis8cHJvZ3JhbWxpc3RpbmcgbmFtZT0iZnVuY3Rpb24udHV0b3JpYWwubWVtX2Z1bi5wb3J0YWJsZSI+PGNsYXNzbmFtZSBhbHQ9ImZ1bmN0aW9uTiI+Ym9vc3Q6OmZ1bmN0aW9uMjwvY2xhc3NuYW1lPiZsdDtpbnQsIFgqLCBpbnQmZ3Q7IGY7CisKK2YgPSAmYW1wO1g6OmZvbzsKKyAgCitYIHg7CitmKCZhbXA7eCwgNSk7PC9wcm9ncmFtbGlzdGluZz4KKzwvZW50cnk+Cis8L3Jvdz4KKzwvdGJvZHk+Cis8L3Rncm91cD4KKzwvaW5mb3JtYWx0YWJsZT4KKzwvcGFyYT4KKworPHBhcmE+IFNldmVyYWwgbGlicmFyaWVzIGV4aXN0IHRoYXQgc3VwcG9ydCBhcmd1bWVudCBiaW5kaW5nLiBUaHJlZSBzdWNoIGxpYnJhcmllcyBhcmUgc3VtbWFyaXplZCBiZWxvdzoKKzxpdGVtaXplZGxpc3Q+CisgIDxsaXN0aXRlbT4gPHBhcmE+PGxpYnJhcnluYW1lPkJpbmQ8L2xpYnJhcnluYW1lPi4gVGhpcyBsaWJyYXJ5IGFsbG93cyBiaW5kaW5nIG9mCisgIGFyZ3VtZW50cyBmb3IgYW55IGZ1bmN0aW9uIG9iamVjdC4gSXQgaXMgbGlnaHR3ZWlnaHQgYW5kIHZlcnkKKyAgcG9ydGFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisKKyAgPGxpc3RpdGVtPiA8cGFyYT5UaGUgQysrIFN0YW5kYXJkIGxpYnJhcnkuIFVzaW5nCisgIDxjb21wdXRlcm91dHB1dD5zdGQ6OmJpbmQxc3Q8L2NvbXB1dGVyb3V0cHV0PiBhbmQKKyAgPGNvbXB1dGVyb3V0cHV0PnN0ZDo6bWVtX2Z1bjwvY29tcHV0ZXJvdXRwdXQ+IHRvZ2V0aGVyIG9uZSBjYW4gYmluZAorICB0aGUgb2JqZWN0IG9mIGEgcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb24gZm9yIHVzZSB3aXRoCisgIEJvb3N0LkZ1bmN0aW9uOgorCisgIDxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgICAgPHRoZWFkPgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT5QcmVmZXJyZWQgc3ludGF4PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+UG9ydGFibGUgc3ludGF4PC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdGRfYmluZC5jeHg5OCI+ICA8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtpbnQgKGludCkmZ3Q7IGY7CitYIHg7CitmID0gc3RkOjpiaW5kMXN0KAorICAgICAgc3RkOjptZW1fZnVuKCZhbXA7WDo6Zm9vKSwgJmFtcDt4KTsKK2YoNSk7IC8vIENhbGwgeC5mb28oNSk8L3Byb2dyYW1saXN0aW5nPgorPC9lbnRyeT4KKzxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5zdGRfYmluZC5wb3J0YWJsZSI+ICA8Y2xhc3NuYW1lIGFsdD0iZnVuY3Rpb25OIj5ib29zdDo6ZnVuY3Rpb24xPC9jbGFzc25hbWU+Jmx0O2ludCwgaW50Jmd0OyBmOworWCB4OworZiA9IHN0ZDo6YmluZDFzdCgKKyAgICAgIHN0ZDo6bWVtX2Z1bigmYW1wO1g6OmZvbyksICZhbXA7eCk7CitmKDUpOyAvLyBDYWxsIHguZm9vKDUpPC9wcm9ncmFtbGlzdGluZz4KKzwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgIDwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L2luZm9ybWFsdGFibGU+Cis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCisgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGxpYnJhcnluYW1lPkxhbWJkYTwvbGlicmFyeW5hbWU+IGxpYnJhcnkuIFRoaXMgbGlicmFyeSBwcm92aWRlcyBhIHBvd2VyZnVsIGNvbXBvc2l0aW9uIG1lY2hhbmlzbSB0byBjb25zdHJ1Y3QgZnVuY3Rpb24gb2JqZWN0cyB0aGF0IHVzZXMgdmVyeSBuYXR1cmFsIEMrKyBzeW50YXguIExhbWJkYSByZXF1aXJlcyBhIGNvbXBpbGVyIHRoYXQgaXMgcmVhc29uYWJseSBjb25mb3JtYW50IHRvIHRoZSBDKysgc3RhbmRhcmQuIDwvcGFyYT48L2xpc3RpdGVtPgorPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CisKKzwvc2VjdGlvbj4KKworPHNlY3Rpb24+CisgIDx0aXRsZT5SZWZlcmVuY2VzIHRvIEZ1bmN0aW9uIE9iamVjdHM8L3RpdGxlPiA8cGFyYT4gSW4gc29tZSBjYXNlcyBpdCBpcworICBleHBlbnNpdmUgKG9yIHNlbWFudGljYWxseSBpbmNvcnJlY3QpIHRvIGhhdmUgQm9vc3QuRnVuY3Rpb24gY2xvbmUgYQorICBmdW5jdGlvbiBvYmplY3QuIEluIHN1Y2ggY2FzZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHJlcXVlc3QgdGhhdAorICBCb29zdC5GdW5jdGlvbiBrZWVwIG9ubHkgYSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBmdW5jdGlvbgorICBvYmplY3QuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgPGNvbXB1dGVyb3V0cHV0PnJlZjwvY29tcHV0ZXJvdXRwdXQ+CisgIGFuZCA8Y29tcHV0ZXJvdXRwdXQ+Y3JlZjwvY29tcHV0ZXJvdXRwdXQ+IGZ1bmN0aW9ucyB0byB3cmFwIGEKKyAgcmVmZXJlbmNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0OgorCisgIDxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgICAgPHRoZWFkPgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT5QcmVmZXJyZWQgc3ludGF4PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+UG9ydGFibGUgc3ludGF4PC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5yZWYuY3h4OTgiPnN0YXRlZnVsX3R5cGUgYV9mdW5jdGlvbl9vYmplY3Q7Cis8Y2xhc3NuYW1lPmJvb3N0OjpmdW5jdGlvbjwvY2xhc3NuYW1lPiZsdDtpbnQgKGludCkmZ3Q7IGY7CitmID0gPGZ1bmN0aW9ubmFtZT5ib29zdDo6cmVmPC9mdW5jdGlvbm5hbWU+KGFfZnVuY3Rpb25fb2JqZWN0KTsKKworPGNsYXNzbmFtZT5ib29zdDo6ZnVuY3Rpb248L2NsYXNzbmFtZT4mbHQ7aW50IChpbnQpJmd0OyBmMihmKTs8L3Byb2dyYW1saXN0aW5nPgorPC9lbnRyeT4KKzxlbnRyeT4KKzxwcm9ncmFtbGlzdGluZyBuYW1lPSJmdW5jdGlvbi50dXRvcmlhbC5yZWYucG9ydGFibGUiPnN0YXRlZnVsX3R5cGUgYV9mdW5jdGlvbl9vYmplY3Q7Cis8Y2xhc3NuYW1lIGFsdD0iZnVuY3Rpb25OIj5ib29zdDo6ZnVuY3Rpb24xPC9jbGFzc25hbWU+Jmx0O2ludCwgaW50Jmd0OyBmOworZiA9IDxmdW5jdGlvbm5hbWU+Ym9vc3Q6OnJlZjwvZnVuY3Rpb25uYW1lPihhX2Z1bmN0aW9uX29iamVjdCk7CisKKzxjbGFzc25hbWUgYWx0PSJmdW5jdGlvbk4iPmJvb3N0OjpmdW5jdGlvbjE8L2NsYXNzbmFtZT4mbHQ7aW50LCBpbnQmZ3Q7IGYyKGYpOzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICA8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC9pbmZvcm1hbHRhYmxlPgorPC9wYXJhPgorCis8cGFyYT4gSGVyZSwgPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIG5vdCBtYWtlIGEgY29weQorb2YgPGNvbXB1dGVyb3V0cHV0PmFfZnVuY3Rpb25fb2JqZWN0PC9jb21wdXRlcm91dHB1dD4sIG5vciB3aWxsCis8Y29tcHV0ZXJvdXRwdXQ+ZjI8L2NvbXB1dGVyb3V0cHV0PiB3aGVuIGl0IGlzIHRhcmdldGVkIHRvCis8Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+J3MgcmVmZXJlbmNlIHRvCis8Y29tcHV0ZXJvdXRwdXQ+YV9mdW5jdGlvbl9vYmplY3Q8L2NvbXB1dGVyb3V0cHV0Pi4gQWRkaXRpb25hbGx5LCB3aGVuCit1c2luZyByZWZlcmVuY2VzIHRvIGZ1bmN0aW9uIG9iamVjdHMsIEJvb3N0LkZ1bmN0aW9uIHdpbGwgbm90IHRocm93CitleGNlcHRpb25zIGR1cmluZyBhc3NpZ25tZW50IG9yIGNvbnN0cnVjdGlvbi4KKzwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24+CisgIDx0aXRsZT5Db21wYXJpbmcgQm9vc3QuRnVuY3Rpb24gZnVuY3Rpb24gb2JqZWN0czwvdGl0bGU+CisKKyAgPHBhcmE+RnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzIGNhbiBiZSBjb21wYXJlZCB2aWEgPGNvZGU+PT08L2NvZGU+CisgIG9yIDxjb2RlPiE9PC9jb2RlPiBhZ2FpbnN0IGFueSBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYW4gYmUgc3RvcmVkCisgIHdpdGhpbiB0aGUgd3JhcHBlci4gSWYgdGhlIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyIGNvbnRhaW5zIGEKKyAgZnVuY3Rpb24gb2JqZWN0IG9mIHRoYXQgdHlwZSwgaXQgd2lsbCBiZSBjb21wYXJlZCBhZ2FpbnN0IHRoZSBnaXZlbgorICBmdW5jdGlvbiBvYmplY3QgKHdoaWNoIG11c3QgYmUgZWl0aGVyIGJlCisgIDxjb25jZXB0bmFtZT5FcXVhbGl0eUNvbXBhcmFibGU8L2NvbmNlcHRuYW1lPiBvciBoYXZlIGFuIG92ZXJsb2FkZWQgPGZ1bmN0aW9ubmFtZT5ib29zdDo6ZnVuY3Rpb25fZXF1YWw8L2Z1bmN0aW9ubmFtZT4pLiBGb3IgaW5zdGFuY2U6PC9wYXJhPgorICAKKyAgPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNvbXBhcmUiPmludCBjb21wdXRlX3dpdGhfWChYKiwgaW50KTsKKworZiA9ICZhbXA7WDo6Zm9vOworYXNzZXJ0KGYgPT0gJmFtcDtYOjpmb28pOworYXNzZXJ0KCZhbXA7Y29tcHV0ZV93aXRoX1ggIT0gZik7PC9wcm9ncmFtbGlzdGluZz4KKworICAgPHBhcmE+V2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhbiBpbnN0YW5jZSBvZgorICAgPGNvZGU+PGNsYXNzbmFtZT5yZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPjwvY29kZT4sIHRoZSBhZGRyZXNzCisgICBvZiB0aGUgb2JqZWN0IGluIHRoZQorICAgPGNvZGU+PGNsYXNzbmFtZT5yZWZlcmVuY2Vfd3JhcHBlcjwvY2xhc3NuYW1lPjwvY29kZT4gaXMgY29tcGFyZWQKKyAgIGFnYWluc3QgdGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCBzdG9yZWQgYnkgdGhlIGZ1bmN0aW9uIG9iamVjdAorICAgd3JhcHBlcjo8L3BhcmE+CisKKyAgPHByb2dyYW1saXN0aW5nIG5hbWU9ImZ1bmN0aW9uLnR1dG9yaWFsLmNvbXBhcmUtcmVmIj5hX3N0YXRlZnVsX29iamVjdCBzbzEsIHNvMjsKK2YgPSA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpyZWY8L2Z1bmN0aW9ubmFtZT4oc28xKTsKK2Fzc2VydChmID09IDxmdW5jdGlvbm5hbWU+Ym9vc3Q6OnJlZjwvZnVuY3Rpb25uYW1lPihzbzEpKTsKK2Fzc2VydChmID09IHNvMSk7IDxlbXBoYXNpcz4vLyBPbmx5IGlmIGFfc3RhdGVmdWxfb2JqZWN0IGlzIDxjb25jZXB0bmFtZT5FcXVhbGl0eUNvbXBhcmFibGU8L2NvbmNlcHRuYW1lPjwvZW1waGFzaXM+Cithc3NlcnQoZiAhPSA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpyZWY8L2Z1bmN0aW9ubmFtZT4oc28yKSk7PC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorCis8L3NlY3Rpb24+CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9iaW5kMXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9iaW5kMXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGZjNjhhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9leGFtcGxlL2JpbmQxc3QuY3BwCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkgZXhhbXBsZXMKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCisvLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworc3RydWN0IFggeworICBYKGludCB2YWwpIDogdmFsdWUodmFsKSB7fQorCisgIGludCBmb28oaW50IHgpIHsgcmV0dXJuIHggKiB2YWx1ZTsgfQorCisgIGludCB2YWx1ZTsKK307CisKKworaW50CittYWluKCkKK3sKKyAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoaW50KT4gZjsKKyAgWCB4KDcpOworICBmID0gc3RkOjpiaW5kMXN0KHN0ZDo6bWVtX2Z1bigmWDo6Zm9vKSwgJngpOworCisgIHN0ZDo6Y291dCA8PCBmKDUpIDw8IHN0ZDo6ZW5kbDsgLy8gQ2FsbCB4LmZvbyg1KQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9pbnRfZGl2LmNwcCBiL2xpYnMvZnVuY3Rpb24vZXhhbXBsZS9pbnRfZGl2LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkxZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi9leGFtcGxlL2ludF9kaXYuY3BwCkBAIC0wLDAgKzEsMjYgQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkgZXhhbXBsZXMKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCisvLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisKK3N0cnVjdCBpbnRfZGl2IHsKKyAgZmxvYXQgb3BlcmF0b3IoKShpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuICgoZmxvYXQpeCkveTsgfTsKK307CisKK2ludAorbWFpbigpCit7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjxmbG9hdCAoaW50LCBpbnQpPiBmOworICBmID0gaW50X2RpdigpOworCisgIHN0ZDo6Y291dCA8PCBmKDUsIDMpIDw8IHN0ZDo6ZW5kbDsgLy8gMS42NjY2NworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9leGFtcGxlL3N1bV9hdmcuY3BwIGIvbGlicy9mdW5jdGlvbi9leGFtcGxlL3N1bV9hdmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OGYzODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL2V4YW1wbGUvc3VtX2F2Zy5jcHAKQEAgLTAsMCArMSwzOCBAQAorLy8gQm9vc3QuRnVuY3Rpb24gbGlicmFyeSBleGFtcGxlcworCisvLyAgQ29weXJpZ2h0IERvdWdsYXMgR3JlZ29yIDIwMDEtMjAwMy4gVXNlLCBtb2RpZmljYXRpb24gYW5kCisvLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KKy8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKwordm9pZCBkb19zdW1fYXZnKGludCB2YWx1ZXNbXSwgaW50IG4sIGludCYgc3VtLCBmbG9hdCYgYXZnKQoreworICBzdW0gPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICBzdW0gKz0gdmFsdWVzW2ldOworICBhdmcgPSAoZmxvYXQpc3VtIC8gbjsKK30KKworaW50CittYWluKCkKK3sKKyAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGludFtdLCBidXQgc29tZSBjb21waWxlcnMgKGUuZy4sIEdDQykKKyAgLy8gY29tcGxhaW4gYWJvdXQgdGhpcworICBuZG5ib29zdDo6ZnVuY3Rpb248dm9pZCAoaW50KiwgaW50LCBpbnQmLCBmbG9hdCYpPiBzdW1fYXZnOworCisgIHN1bV9hdmcgPSAmZG9fc3VtX2F2ZzsKKworICBpbnQgdmFsdWVzWzVdID0geyAxLCAxLCAyLCAzLCA1IH07CisgIGludCBzdW07CisgIGZsb2F0IGF2ZzsKKyAgc3VtX2F2Zyh2YWx1ZXMsIDUsIHN1bSwgYXZnKTsKKworICBzdGQ6OmNvdXQgPDwgInN1bSA9ICIgPDwgc3VtIDw8IHN0ZDo6ZW5kbDsKKyAgc3RkOjpjb3V0IDw8ICJhdmcgPSAiIDw8IGF2ZyA8PCBzdGQ6OmVuZGw7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbi9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDQwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPGh0bWw+Cis8IS0tCisgICBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBHcmVnb3IgPGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tPgorICAKKyAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKyAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAgLS0+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD0uLi8uLi9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgcGxlYXNlIGdvIHRvCis8YSBocmVmPSIuLi8uLi9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIj4uLi8uLi9kb2MvaHRtbC9mdW5jdGlvbi5odG1sPC9hPiAmbmJzcDs8aHI+Cis8cD6pIENvcHlyaWdodCBCZW1hbiBEYXdlcywgMjAwMTwvcD4KKzxwPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgCitmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvciBjb3B5IAorYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9wPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0ZGZlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb24vdGVzdC9KYW1maWxlLnYyCkBAIC0wLDAgKzEsNjcgQEAKKyMgRnVuY3Rpb24gbGlicmFyeQorCisjIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorIyBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgorIyAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyMgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvCisKK3Byb2plY3QKKyAgICA6IHJlcXVpcmVtZW50cyA8dG9vbHNldD5tc3ZjOjxhc3luY2gtZXhjZXB0aW9ucz5vbgorICAgIDogc291cmNlLWxvY2F0aW9uICQoQk9PU1RfUk9PVCkKKyAgICA7CisKKyMgYnJpbmcgaW4gcnVsZXMgZm9yIHRlc3RpbmcKK2ltcG9ydCB0ZXN0aW5nIDsKKworeworCisgIHRlc3Qtc3VpdGUgZnVuY3Rpb24KKyAgICA6IAorICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAgOiAgOiAgOiAgOiBsaWJfZnVuY3Rpb25fdGVzdCBdCisKKyAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX25fdGVzdC5jcHAgOiAgOiAgOiAgOiAgXQorCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9hbGxvY2F0b3JfdGVzdC5jcHAgLi4vLi4vLi4vbGlicy90ZXN0L2J1aWxkLy9uZG5ib29zdF90ZXN0X2V4ZWNfbW9uaXRvciA6ICA6ICA6ICA6ICBdCisKKyAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L3N0YXRlbGVzc190ZXN0LmNwcCAuLi8uLi8uLi9saWJzL3Rlc3QvYnVpbGQvL25kbmJvb3N0X3Rlc3RfZXhlY19tb25pdG9yIDogIDogIDogIDogIF0KKworICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvbGFtYmRhX3Rlc3QuY3BwIC4uLy4uLy4uL2xpYnMvdGVzdC9idWlsZC8vbmRuYm9vc3RfdGVzdF9leGVjX21vbml0b3IgOiAgOiAgOiAgOiAgXQorCisgIFsgY29tcGlsZS1mYWlsIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwxLmNwcCA6ICA6ICA6ICA6ICBdCisKKyAgWyBjb21waWxlLWZhaWwgbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDIuY3BwIDogIDogIDogIDogIF0KKworICBbIGNvbXBpbGUgbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uXzMwLmNwcCA6ICA6ICA6ICA6ICBdIAorCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9jeHg5OC5jcHAgOiAgOiAgOiAgOiAgXQorCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9wb3J0YWJsZS5jcHAgOiAgOiAgOiAgOiAgXQorCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9zdW1fYXZnX2N4eDk4LmNwcCA6ICA6ICA6ICA6ICBdCisKKyAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L3N1bV9hdmdfcG9ydGFibGUuY3BwIDogIDogIDogIDogIF0KKworICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9jeHg5OC5jcHAgOiAgOiAgOiAgOiAgXQorCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9tZW1fZnVuX3BvcnRhYmxlLmNwcCA6ICA6ICA6ICA6ICBdCisKKyAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L3N0ZF9iaW5kX2N4eDk4LmNwcCA6ICA6ICA6ICA6ICBdCisKKyAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L3N0ZF9iaW5kX3BvcnRhYmxlLmNwcCA6ICA6ICA6ICA6ICBdCisKKyAgWyBydW4gbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3JlZl9jeHg5OC5jcHAgOiAgOiAgOiAgOiAgXQorCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9yZWZfcG9ydGFibGUuY3BwIDogIDogIDogIDogIF0KKyAgCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluc190ZXN0LmNwcCA6IDogOiA6IF0KKyAgIAorICBbIHJ1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvY29udGFpbnMyX3Rlc3QuY3BwIDogOiA6IDogXQorICAgCisgIFsgcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9ub3Rocm93X3N3YXAuY3BwIDogIDogIDogIDogIF0KKworICBbIGNvbXBpbGUgbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3R5cGVvZl90ZXN0LmNwcCBdCisgOworfQorICAgICAgCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvYWxsb2NhdG9yX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2FsbG9jYXRvcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTkxZTZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L2FsbG9jYXRvcl90ZXN0LmNwcApAQCAtMCwwICsxLDEzNyBAQAorLy8gQm9vc3QuRnVuY3Rpb24gbGlicmFyeQorCisvLyAgQ29weXJpZ2h0IERvdWdsYXMgR3JlZ29yIDIwMDEtMjAwMy4gVXNlLCBtb2RpZmljYXRpb24gYW5kCisvLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KKy8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcKKworI2luY2x1ZGUgPGJvb3N0L3Rlc3QvbWluaW1hbC5ocHA+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBuZG5ib29zdDsKKworc3RhdGljIGludCBhbGxvY19jb3VudCA9IDA7CitzdGF0aWMgaW50IGRlYWxsb2NfY291bnQgPSAwOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGNvdW50aW5nX2FsbG9jYXRvciA6IHB1YmxpYyBzdGQ6OmFsbG9jYXRvcjxUPgoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICBzdHJ1Y3QgcmViaW5kCisgIHsKKyAgICB0eXBlZGVmIGNvdW50aW5nX2FsbG9jYXRvcjxVPiBvdGhlcjsKKyAgfTsKKworICBjb3VudGluZ19hbGxvY2F0b3IoKQorICB7CisgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICBjb3VudGluZ19hbGxvY2F0b3IoIGNvdW50aW5nX2FsbG9jYXRvcjxVPiApCisgIHsKKyAgfQorCisgIFQqIGFsbG9jYXRlKHN0ZDo6c2l6ZV90IG4pCisgIHsKKyAgICBhbGxvY19jb3VudCsrOworICAgIHJldHVybiBzdGQ6OmFsbG9jYXRvcjxUPjo6YWxsb2NhdGUobik7CisgIH0KKworICB2b2lkIGRlYWxsb2NhdGUoVCogcCwgc3RkOjpzaXplX3QgbikKKyAgeworICAgIGRlYWxsb2NfY291bnQrKzsKKyAgICBzdGQ6OmFsbG9jYXRvcjxUPjo6ZGVhbGxvY2F0ZShwLCBuKTsKKyAgfQorfTsKKworc3RydWN0IGVuYWJsZV9zbWFsbF9vYmplY3Rfb3B0aW1pemF0aW9uCit7Cit9OworCitzdHJ1Y3QgZGlzYWJsZV9zbWFsbF9vYmplY3Rfb3B0aW1pemF0aW9uCit7CisgIGludCB1bnVzZWRfc3RhdGVfZGF0YVszMl07Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgYmFzZT4KK3N0cnVjdCBwbHVzX2ludDogYmFzZQoreworICBpbnQgb3BlcmF0b3IoKShpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggKyB5OyB9Cit9OworCitzdGF0aWMgaW50IGRvX21pbnVzKGludCB4LCBpbnQgeSkgeyByZXR1cm4geC15OyB9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBiYXNlPgorc3RydWN0IERvTm90aGluZzogYmFzZQoreworICB2b2lkIG9wZXJhdG9yKCkoKSBjb25zdCB7fQorfTsKKworc3RhdGljIHZvaWQgZG9fbm90aGluZygpIHt9CisKK2ludAordGVzdF9tYWluKGludCwgY2hhcipbXSkKK3sKKyAgZnVuY3Rpb24yPGludCwgaW50LCBpbnQ+IGY7CisgIGYuYXNzaWduKCBwbHVzX2ludDxkaXNhYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24+KCksIGNvdW50aW5nX2FsbG9jYXRvcjxpbnQ+KCkgKTsKKyAgZi5jbGVhcigpOworICBCT09TVF9DSEVDSyhhbGxvY19jb3VudCA9PSAxKTsKKyAgQk9PU1RfQ0hFQ0soZGVhbGxvY19jb3VudCA9PSAxKTsKKyAgYWxsb2NfY291bnQgPSAwOworICBkZWFsbG9jX2NvdW50ID0gMDsKKyAgZi5hc3NpZ24oIHBsdXNfaW50PGVuYWJsZV9zbWFsbF9vYmplY3Rfb3B0aW1pemF0aW9uPigpLCBjb3VudGluZ19hbGxvY2F0b3I8aW50PigpICk7CisgIGYuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0soYWxsb2NfY291bnQgPT0gMCk7CisgIEJPT1NUX0NIRUNLKGRlYWxsb2NfY291bnQgPT0gMCk7CisgIGYuYXNzaWduKCBwbHVzX2ludDxkaXNhYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24+KCksIHN0ZDo6YWxsb2NhdG9yPGludD4oKSApOworICBmLmNsZWFyKCk7CisgIGYuYXNzaWduKCBwbHVzX2ludDxlbmFibGVfc21hbGxfb2JqZWN0X29wdGltaXphdGlvbj4oKSwgc3RkOjphbGxvY2F0b3I8aW50PigpICk7CisgIGYuY2xlYXIoKTsKKworICBhbGxvY19jb3VudCA9IDA7CisgIGRlYWxsb2NfY291bnQgPSAwOworICBmLmFzc2lnbiggJmRvX21pbnVzLCBjb3VudGluZ19hbGxvY2F0b3I8aW50PigpICk7CisgIGYuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0soYWxsb2NfY291bnQgPT0gMCk7CisgIEJPT1NUX0NIRUNLKGRlYWxsb2NfY291bnQgPT0gMCk7CisgIGYuYXNzaWduKCAmZG9fbWludXMsIHN0ZDo6YWxsb2NhdG9yPGludD4oKSApOworICBmLmNsZWFyKCk7CisKKyAgZnVuY3Rpb24wPHZvaWQ+IGZ2OworICBhbGxvY19jb3VudCA9IDA7CisgIGRlYWxsb2NfY291bnQgPSAwOworICBmdi5hc3NpZ24oIERvTm90aGluZzxkaXNhYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24+KCksIGNvdW50aW5nX2FsbG9jYXRvcjxpbnQ+KCkgKTsKKyAgZnYuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0soYWxsb2NfY291bnQgPT0gMSk7CisgIEJPT1NUX0NIRUNLKGRlYWxsb2NfY291bnQgPT0gMSk7CisgIGFsbG9jX2NvdW50ID0gMDsKKyAgZGVhbGxvY19jb3VudCA9IDA7CisgIGZ2LmFzc2lnbiggRG9Ob3RoaW5nPGVuYWJsZV9zbWFsbF9vYmplY3Rfb3B0aW1pemF0aW9uPigpLCBjb3VudGluZ19hbGxvY2F0b3I8aW50PigpICk7CisgIGZ2LmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKGFsbG9jX2NvdW50ID09IDApOworICBCT09TVF9DSEVDSyhkZWFsbG9jX2NvdW50ID09IDApOworICBmdi5hc3NpZ24oIERvTm90aGluZzxkaXNhYmxlX3NtYWxsX29iamVjdF9vcHRpbWl6YXRpb24+KCksIHN0ZDo6YWxsb2NhdG9yPGludD4oKSApOworICBmdi5jbGVhcigpOworICBmdi5hc3NpZ24oIERvTm90aGluZzxlbmFibGVfc21hbGxfb2JqZWN0X29wdGltaXphdGlvbj4oKSwgc3RkOjphbGxvY2F0b3I8aW50PigpICk7CisgIGZ2LmNsZWFyKCk7CisKKyAgYWxsb2NfY291bnQgPSAwOworICBkZWFsbG9jX2NvdW50ID0gMDsKKyAgZnYuYXNzaWduKCAmZG9fbm90aGluZywgY291bnRpbmdfYWxsb2NhdG9yPGludD4oKSApOworICBmdi5jbGVhcigpOworICBCT09TVF9DSEVDSyhhbGxvY19jb3VudCA9PSAwKTsKKyAgQk9PU1RfQ0hFQ0soZGVhbGxvY19jb3VudCA9PSAwKTsKKyAgZnYuYXNzaWduKCAmZG9fbm90aGluZywgc3RkOjphbGxvY2F0b3I8aW50PigpICk7CisgIGZ2LmNsZWFyKCk7CisgIAorICBmdW5jdGlvbjA8dm9pZD4gZnYyOworICBmdi5hc3NpZ24oJmRvX25vdGhpbmcsIHN0ZDo6YWxsb2NhdG9yPGludD4oKSApOworICBmdjIuYXNzaWduKGZ2LCBzdGQ6OmFsbG9jYXRvcjxpbnQ+KCkgKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluczJfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvY29udGFpbnMyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjdlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvY29udGFpbnMyX3Rlc3QuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDA0LgorLy8gIENvcHlyaWdodCAyMDA1IFBldGVyIERpbW92CisKKy8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8KKy8vICB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisvLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKK3N0YXRpYyBpbnQgZm9ydHlfdHdvKCkKK3sKKyAgICByZXR1cm4gNDI7Cit9CisKK3N0cnVjdCBTZXZlbnRlZW4KK3sKKyAgICBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gMTc7CisgICAgfQorfTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNldmVudGVlbiYsIGNvbnN0IFNldmVudGVlbiYpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCBSZXR1cm5JbnQKK3sKKyAgICBleHBsaWNpdCBSZXR1cm5JbnQoaW50IHZhbHVlKSA6IHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaW50IHZhbHVlOworfTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJldHVybkludCYgeCwgY29uc3QgUmV0dXJuSW50JiB5KQoreworICAgIHJldHVybiB4LnZhbHVlID09IHkudmFsdWU7Cit9CisKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBSZXR1cm5JbnQmIHgsIGNvbnN0IFJldHVybkludCYgeSkKK3sKKyAgICByZXR1cm4geC52YWx1ZSAhPSB5LnZhbHVlOworfQorCitpbnQgbWFpbigpCit7CisgICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxpbnQ+IGZuOworCisgICAgZm4gPSAmZm9ydHlfdHdvOworCisgICAgQk9PU1RfVEVTVCggZm4oKSA9PSA0MiApOworCisgICAgQk9PU1RfVEVTVCggZm4uY29udGFpbnMoJmZvcnR5X3R3bykgKTsKKyAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoIFNldmVudGVlbigpICkgKTsKKyAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoIFJldHVybkludCgwKSApICk7CisgICAgQk9PU1RfVEVTVCggIWZuLmNvbnRhaW5zKCBSZXR1cm5JbnQoMTIpICkgKTsKKworICAgIGZuID0gU2V2ZW50ZWVuKCk7CisKKyAgICBCT09TVF9URVNUKCBmbigpID09IDE3ICk7CisKKyAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoICZmb3J0eV90d28gKSApOworICAgIEJPT1NUX1RFU1QoIGZuLmNvbnRhaW5zKCBTZXZlbnRlZW4oKSApICk7CisgICAgQk9PU1RfVEVTVCggIWZuLmNvbnRhaW5zKCBSZXR1cm5JbnQoMCkgKSApOworICAgIEJPT1NUX1RFU1QoICFmbi5jb250YWlucyggUmV0dXJuSW50KDEyKSApICk7CisKKyAgICBmbiA9IFJldHVybkludCgxMik7CisKKyAgICBCT09TVF9URVNUKCBmbigpID09IDEyICk7CisKKyAgICBCT09TVF9URVNUKCAhZm4uY29udGFpbnMoICZmb3J0eV90d28gKSApOworICAgIEJPT1NUX1RFU1QoICFmbi5jb250YWlucyggU2V2ZW50ZWVuKCkgKSApOworICAgIEJPT1NUX1RFU1QoICFmbi5jb250YWlucyggUmV0dXJuSW50KDApICkgKTsKKyAgICBCT09TVF9URVNUKCBmbi5jb250YWlucyggUmV0dXJuSW50KDEyKSApICk7CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluc190ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9jb250YWluc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L2NvbnRhaW5zX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5CisKKy8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwNC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCisvLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KKy8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlIDxib29zdC90ZXN0L21pbmltYWwuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxib29zdC9yZWYuaHBwPgorCitzdGF0aWMgaW50IGZvcnR5X3R3bygpIHsgcmV0dXJuIDQyOyB9CisKK3N0cnVjdCBTZXZlbnRlZW4KK3sKKyAgaW50IG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiAxNzsgfQorfTsKKworc3RydWN0IFJldHVybkludAoreworICBleHBsaWNpdCBSZXR1cm5JbnQoaW50IHZhbHVlKSA6IHZhbHVlKHZhbHVlKSB7fQorCisgIGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0KKworICBpbnQgdmFsdWU7Cit9OworCitib29sIG9wZXJhdG9yPT0oY29uc3QgUmV0dXJuSW50JiB4LCBjb25zdCBSZXR1cm5JbnQmIHkpCit7IHJldHVybiB4LnZhbHVlID09IHkudmFsdWU7IH0KKworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJldHVybkludCYgeCwgY29uc3QgUmV0dXJuSW50JiB5KQoreyByZXR1cm4geC52YWx1ZSAhPSB5LnZhbHVlOyB9CisKK25hbWVzcGFjZSBjb250YWluX3Rlc3QgeworCitzdHJ1Y3QgUmV0dXJuSW50RkUKK3sKKyAgZXhwbGljaXQgUmV0dXJuSW50RkUoaW50IHZhbHVlKSA6IHZhbHVlKHZhbHVlKSB7fQorCisgIGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0KKworICBpbnQgdmFsdWU7Cit9OworCit9CisKKyNpZm5kZWYgQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUAorCituYW1lc3BhY2UgY29udGFpbl90ZXN0IHsKKyMgaWZuZGVmIEJPT1NUX05PX0ZVTkNUSU9OX1RFTVBMQVRFX09SREVSSU5HCitib29sIGZ1bmN0aW9uX2VxdWFsKGNvbnN0IFJldHVybkludEZFJiB4LCBjb25zdCBSZXR1cm5JbnRGRSYgeSkKK3sgcmV0dXJuIHgudmFsdWUgPT0geS52YWx1ZTsgfQorIyBlbHNlCitib29sIGZ1bmN0aW9uX2VxdWFsX2ltcGwoY29uc3QgUmV0dXJuSW50RkUmIHgsIGNvbnN0IFJldHVybkludEZFJiB5LCBpbnQpCit7IHJldHVybiB4LnZhbHVlID09IHkudmFsdWU7IH0KKyMgZW5kaWYgLy8gI2lmbmRlZiBCT09TVF9OT19GVU5DVElPTl9URU1QTEFURV9PUkRFUklORworfQorI2Vsc2UgLy8gQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUAorbmFtZXNwYWNlIG5kbmJvb3N0IHsKKyMgaWZuZGVmIEJPT1NUX05PX0ZVTkNUSU9OX1RFTVBMQVRFX09SREVSSU5HCitib29sIAorZnVuY3Rpb25fZXF1YWwoY29uc3QgY29udGFpbl90ZXN0OjpSZXR1cm5JbnRGRSYgeCwgCisgICAgICAgICAgICAgICBjb25zdCBjb250YWluX3Rlc3Q6OlJldHVybkludEZFJiB5KQoreyByZXR1cm4geC52YWx1ZSA9PSB5LnZhbHVlOyB9CisjIGVsc2UKK2Jvb2wgCitmdW5jdGlvbl9lcXVhbF9pbXBsKGNvbnN0IGNvbnRhaW5fdGVzdDo6UmV0dXJuSW50RkUmIHgsIAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluX3Rlc3Q6OlJldHVybkludEZFJiB5LCBpbnQpCit7IHJldHVybiB4LnZhbHVlID09IHkudmFsdWU7IH0KKyMgZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0YXJnZXRfdGVzdCgpCit7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjA8aW50PiBmOworCisgIGYgPSAmZm9ydHlfdHdvOworICBCT09TVF9DSEVDSygqZi50YXJnZXQ8aW50ICgqKSgpPigpID09ICZmb3J0eV90d28pOworICBCT09TVF9DSEVDSyghZi50YXJnZXQ8U2V2ZW50ZWVuPigpKTsKKworICBmID0gU2V2ZW50ZWVuKCk7CisgIEJPT1NUX0NIRUNLKCFmLnRhcmdldDxpbnQgKCopKCk+KCkpOworICBCT09TVF9DSEVDSyhmLnRhcmdldDxTZXZlbnRlZW4+KCkpOworCisgIFNldmVudGVlbiB0aGlzX3NldmVudGVlbjsKKyAgZiA9IG5kbmJvb3N0OjpyZWYodGhpc19zZXZlbnRlZW4pOworICBCT09TVF9DSEVDSyghZi50YXJnZXQ8aW50ICgqKSgpPigpKTsKKyAgQk9PU1RfQ0hFQ0soZi50YXJnZXQ8U2V2ZW50ZWVuPigpKTsKKyAgQk9PU1RfQ0hFQ0soZi50YXJnZXQ8U2V2ZW50ZWVuPigpID09ICZ0aGlzX3NldmVudGVlbik7CisKKyAgY29uc3QgU2V2ZW50ZWVuIGNvbnN0X3NldmVudGVlbiA9IHRoaXNfc2V2ZW50ZWVuOworICBmID0gbmRuYm9vc3Q6OnJlZihjb25zdF9zZXZlbnRlZW4pOworICBCT09TVF9DSEVDSyghZi50YXJnZXQ8aW50ICgqKSgpPigpKTsKKyAgQk9PU1RfQ0hFQ0soZi50YXJnZXQ8Y29uc3QgU2V2ZW50ZWVuPigpKTsKKyAgQk9PU1RfQ0hFQ0soZi50YXJnZXQ8Y29uc3QgU2V2ZW50ZWVuPigpID09ICZjb25zdF9zZXZlbnRlZW4pOworICBCT09TVF9DSEVDSyhmLnRhcmdldDxjb25zdCB2b2xhdGlsZSBTZXZlbnRlZW4+KCkpOworICBCT09TVF9DSEVDSyghZi50YXJnZXQ8U2V2ZW50ZWVuPigpKTsKKyAgQk9PU1RfQ0hFQ0soIWYudGFyZ2V0PHZvbGF0aWxlIFNldmVudGVlbj4oKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVxdWFsX3Rlc3QoKQoreworICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZjsKKworICBmID0gJmZvcnR5X3R3bzsKKyAgQk9PU1RfQ0hFQ0soZiA9PSAmZm9ydHlfdHdvKTsKKyAgQk9PU1RfQ0hFQ0soZiAhPSBSZXR1cm5JbnQoMTcpKTsKKyNpZiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPD0gMykKKyAgQk9PU1RfQ0hFQ0soJmZvcnR5X3R3byA9PSBmKTsKKyAgQk9PU1RfQ0hFQ0soUmV0dXJuSW50KDE3KSAhPSBmKTsKKyNlbmRpZgorCisgIEJPT1NUX0NIRUNLKGYuY29udGFpbnMoJmZvcnR5X3R3bykpOworCisgIGYgPSBSZXR1cm5JbnQoMTcpOworICBCT09TVF9DSEVDSyhmICE9ICZmb3J0eV90d28pOworICBCT09TVF9DSEVDSyhmID09IFJldHVybkludCgxNykpOworICBCT09TVF9DSEVDSyhmICE9IFJldHVybkludCgxNikpOworI2lmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8PSAzKQorICBCT09TVF9DSEVDSygmZm9ydHlfdHdvICE9IGYpOworICBCT09TVF9DSEVDSyhSZXR1cm5JbnQoMTcpID09IGYpOworICBCT09TVF9DSEVDSyhSZXR1cm5JbnQoMTYpICE9IGYpOworI2VuZGlmCisKKyAgQk9PU1RfQ0hFQ0soZi5jb250YWlucyhSZXR1cm5JbnQoMTcpKSk7CisKKyAgZiA9IGNvbnRhaW5fdGVzdDo6UmV0dXJuSW50RkUoMTcpOworICBCT09TVF9DSEVDSyhmICE9ICZmb3J0eV90d28pOworICBCT09TVF9DSEVDSyhmID09IGNvbnRhaW5fdGVzdDo6UmV0dXJuSW50RkUoMTcpKTsKKyAgQk9PU1RfQ0hFQ0soZiAhPSBjb250YWluX3Rlc3Q6OlJldHVybkludEZFKDE2KSk7CisjaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCisgIEJPT1NUX0NIRUNLKCZmb3J0eV90d28gIT0gZik7CisgIEJPT1NUX0NIRUNLKGNvbnRhaW5fdGVzdDo6UmV0dXJuSW50RkUoMTcpID09IGYpOworICBCT09TVF9DSEVDSyhjb250YWluX3Rlc3Q6OlJldHVybkludEZFKDE2KSAhPSBmKTsKKyNlbmRpZgorCisgIEJPT1NUX0NIRUNLKGYuY29udGFpbnMoY29udGFpbl90ZXN0OjpSZXR1cm5JbnRGRSgxNykpKTsKKworI2lmICFkZWZpbmVkKEJPT1NUX0ZVTkNUSU9OX05PX0ZVTkNUSU9OX1RZUEVfU1lOVEFYKQorICBuZG5ib29zdDo6ZnVuY3Rpb248aW50KHZvaWQpPiBnOworCisgIGcgPSAmZm9ydHlfdHdvOworICBCT09TVF9DSEVDSyhnID09ICZmb3J0eV90d28pOworICBCT09TVF9DSEVDSyhnICE9IFJldHVybkludCgxNykpOworIyAgaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCisgIEJPT1NUX0NIRUNLKCZmb3J0eV90d28gPT0gZyk7CisgIEJPT1NUX0NIRUNLKFJldHVybkludCgxNykgIT0gZyk7CisjICBlbmRpZgorCisgIGcgPSBSZXR1cm5JbnQoMTcpOworICBCT09TVF9DSEVDSyhnICE9ICZmb3J0eV90d28pOworICBCT09TVF9DSEVDSyhnID09IFJldHVybkludCgxNykpOworICBCT09TVF9DSEVDSyhnICE9IFJldHVybkludCgxNikpOworIyAgaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCisgIEJPT1NUX0NIRUNLKCZmb3J0eV90d28gIT0gZyk7CisgIEJPT1NUX0NIRUNLKFJldHVybkludCgxNykgPT0gZyk7CisgIEJPT1NUX0NIRUNLKFJldHVybkludCgxNikgIT0gZyk7CisjICBlbmRpZgorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHJlZl9lcXVhbF90ZXN0KCkKK3sKKyAgeworICAgIFJldHVybkludCByaSgxNyk7CisgICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxpbnQ+IGYgPSBuZG5ib29zdDo6cmVmKHJpKTsKKworICAgIC8vIFJlZmVyZW5jZXMgYW5kIHZhbHVlcyBhcmUgZXF1YWwKKyAgICBCT09TVF9DSEVDSyhmID09IG5kbmJvb3N0OjpyZWYocmkpKTsKKyAgICBCT09TVF9DSEVDSyhmID09IHJpKTsKKyAgICBCT09TVF9DSEVDSyhuZG5ib29zdDo6cmVmKHJpKSA9PSBmKTsKKyAgICBCT09TVF9DSEVDSyghKGYgIT0gbmRuYm9vc3Q6OnJlZihyaSkpKTsKKyAgICBCT09TVF9DSEVDSyghKGYgIT0gcmkpKTsKKyAgICBCT09TVF9DSEVDSyghKG5kbmJvb3N0OjpyZWYocmkpICE9IGYpKTsKKyNpZiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPD0gMykKKyAgICBCT09TVF9DSEVDSyhyaSA9PSBmKTsKKyAgICBCT09TVF9DSEVDSyghKHJpICE9IGYpKTsKKyNlbmRpZgorCisgICAgLy8gVmFsdWVzIGVxdWFsLCByZWZlcmVuY2VzIGluZXF1YWwKKyAgICBSZXR1cm5JbnQgcmkyKDE3KTsKKyAgICBCT09TVF9DSEVDSyhmID09IHJpMik7CisgICAgQk9PU1RfQ0hFQ0soZiAhPSBuZG5ib29zdDo6cmVmKHJpMikpOworICAgIEJPT1NUX0NIRUNLKG5kbmJvb3N0OjpyZWYocmkyKSAhPSBmKTsKKyAgICBCT09TVF9DSEVDSyghKGYgIT0gcmkyKSk7CisgICAgQk9PU1RfQ0hFQ0soIShmID09IG5kbmJvb3N0OjpyZWYocmkyKSkpOworICAgIEJPT1NUX0NIRUNLKCEobmRuYm9vc3Q6OnJlZihyaTIpID09IGYpKTsKKyNpZiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPD0gMykKKyAgICBCT09TVF9DSEVDSyhyaTIgPT0gZik7CisgICAgQk9PU1RfQ0hFQ0soIShyaTIgIT0gZikpOworI2VuZGlmIAorICB9CisKKyNpZiAhZGVmaW5lZChCT09TVF9GVU5DVElPTl9OT19GVU5DVElPTl9UWVBFX1NZTlRBWCkKKyAgeworICAgIFJldHVybkludCByaSgxNyk7CisgICAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCh2b2lkKT4gZiA9IG5kbmJvb3N0OjpyZWYocmkpOworCisgICAgLy8gUmVmZXJlbmNlcyBhbmQgdmFsdWVzIGFyZSBlcXVhbAorICAgIEJPT1NUX0NIRUNLKGYgPT0gbmRuYm9vc3Q6OnJlZihyaSkpOworICAgIEJPT1NUX0NIRUNLKGYgPT0gcmkpOworICAgIEJPT1NUX0NIRUNLKG5kbmJvb3N0OjpyZWYocmkpID09IGYpOworICAgIEJPT1NUX0NIRUNLKCEoZiAhPSBuZG5ib29zdDo6cmVmKHJpKSkpOworICAgIEJPT1NUX0NIRUNLKCEoZiAhPSByaSkpOworICAgIEJPT1NUX0NIRUNLKCEobmRuYm9vc3Q6OnJlZihyaSkgIT0gZikpOworIyAgaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDw9IDMpCisgICAgQk9PU1RfQ0hFQ0socmkgPT0gZik7CisgICAgQk9PU1RfQ0hFQ0soIShyaSAhPSBmKSk7CisjICBlbmRpZgorCisgICAgLy8gVmFsdWVzIGVxdWFsLCByZWZlcmVuY2VzIGluZXF1YWwKKyAgICBSZXR1cm5JbnQgcmkyKDE3KTsKKyAgICBCT09TVF9DSEVDSyhmID09IHJpMik7CisgICAgQk9PU1RfQ0hFQ0soZiAhPSBuZG5ib29zdDo6cmVmKHJpMikpOworICAgIEJPT1NUX0NIRUNLKG5kbmJvb3N0OjpyZWYocmkyKSAhPSBmKTsKKyAgICBCT09TVF9DSEVDSyghKGYgIT0gcmkyKSk7CisgICAgQk9PU1RfQ0hFQ0soIShmID09IG5kbmJvb3N0OjpyZWYocmkyKSkpOworICAgIEJPT1NUX0NIRUNLKCEobmRuYm9vc3Q6OnJlZihyaTIpID09IGYpKTsKKyMgIGlmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8PSAzKQorICAgIEJPT1NUX0NIRUNLKHJpMiA9PSBmKTsKKyAgICBCT09TVF9DSEVDSyghKHJpMiAhPSBmKSk7CisjICBlbmRpZgorICB9CisjZW5kaWYKK30KKworaW50IHRlc3RfbWFpbihpbnQsIGNoYXIqW10pCit7CisgIHRhcmdldF90ZXN0KCk7CisgIGVxdWFsX3Rlc3QoKTsKKyAgcmVmX2VxdWFsX3Rlc3QoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl8zMC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fMzAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OGI0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fMzAuY3BwCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAyLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCisvLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCisKKy8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB0cnkgdG8gcmVkZWZpbmUgZnVuY3Rpb24yCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24vZnVuY3Rpb24yLmhwcD4KKworLy8gRGVmaW5lIGFsbCBCb29zdC5GdW5jdGlvbiBjbGFzcyB0ZW1wbGF0ZXMgdXAgdG8gMzAgYXJndW1lbnRzCisjZGVmaW5lIEJPT1NUX0ZVTkNUSU9OX01BWF9BUkdTIDMwCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorCitpbnQgbWFpbigpCit7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjA8ZmxvYXQ+IGYwOworCisgIG5kbmJvb3N0OjpmdW5jdGlvbjMwPGZsb2F0LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKKyAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50PiBmMzA7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX2FyaXRoX2N4eDk4LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9jeHg5OC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmMWYwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9jeHg5OC5jcHAKQEAgLTAsMCArMSwzNCBAQAorLy8gRnVuY3Rpb24gbGlicmFyeQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgorCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLworCisgICAgCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCisKK2Zsb2F0IG11bF9pbnRzKGludCB4LCBpbnQgeSkgeyByZXR1cm4gKChmbG9hdCl4KSAqIHk7IH0KK3N0cnVjdCBpbnRfZGl2IHsgCisgIGZsb2F0IG9wZXJhdG9yKCkoaW50IHgsIGludCB5KSBjb25zdCB7IHJldHVybiAoKGZsb2F0KXgpL3k7IH07IAorfTsKKworaW50IG1haW4oKQoreworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjxmbG9hdCAoaW50IHgsIGludCB5KT4gZjsKKyAgICBmID0gaW50X2RpdigpOworICAgIHN0ZDo6Y291dCA8PCBmKDUsIDMpIDw8IHN0ZDo6ZW5kbDsKKyAgICBpZiAoZikKKyAgc3RkOjpjb3V0IDw8IGYoNSwgMykgPDwgc3RkOjplbmRsOworZWxzZQorICBzdGQ6OmNvdXQgPDwgImYgaGFzIG5vIHRhcmdldCwgc28gaXQgaXMgdW5zYWZlIHRvIGNhbGwiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmID0gMDsKKyAgICBmID0gJm11bF9pbnRzOworICAKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9hcml0aF9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfcG9ydGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZWJjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fYXJpdGhfcG9ydGFibGUuY3BwCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEZ1bmN0aW9uIGxpYnJhcnkKKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRG91Z2xhcyBHcmVnb3IKKworLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKy8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy8KKworICAgIAorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworZmxvYXQgbXVsX2ludHMoaW50IHgsIGludCB5KSB7IHJldHVybiAoKGZsb2F0KXgpICogeTsgfQorc3RydWN0IGludF9kaXYgeyAKKyAgZmxvYXQgb3BlcmF0b3IoKShpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuICgoZmxvYXQpeCkveTsgfTsgCit9OworaW50IG1haW4oKQoreworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjI8ZmxvYXQsIGludCwgaW50PiBmOworICAgIGYgPSBpbnRfZGl2KCk7CisgICAgc3RkOjpjb3V0IDw8IGYoNSwgMykgPDwgc3RkOjplbmRsOworICAgIGlmIChmKQorICBzdGQ6OmNvdXQgPDwgZig1LCAzKSA8PCBzdGQ6OmVuZGw7CitlbHNlCisgIHN0ZDo6Y291dCA8PCAiZiBoYXMgbm8gdGFyZ2V0LCBzbyBpdCBpcyB1bnNhZmUgdG8gY2FsbCIgPDwgc3RkOjplbmRsOworICAgIGYgPSAwOworICAgIGYgPSAmbXVsX2ludHM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9uX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX25fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFiNGJmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl9uX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNjk3IEBACisvLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5CisKKy8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDAzLiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKKy8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgorLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZworCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHN0cmluZz4KKwordXNpbmcgbmFtZXNwYWNlIG5kbmJvb3N0OwordXNpbmcgc3RkOjpzdHJpbmc7Cit1c2luZyBzdGQ6Om5lZ2F0ZTsKKworaW50IGdsb2JhbF9pbnQ7CisKK3N0cnVjdCB3cml0ZV9maXZlX29iaiB7IHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgZ2xvYmFsX2ludCA9IDU7IH0gfTsKK3N0cnVjdCB3cml0ZV90aHJlZV9vYmogeyBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgZ2xvYmFsX2ludCA9IDM7IHJldHVybiA3OyB9fTsKK3N0YXRpYyB2b2lkIHdyaXRlX2ZpdmUoKSB7IGdsb2JhbF9pbnQgPSA1OyB9CitzdGF0aWMgdm9pZCB3cml0ZV90aHJlZSgpIHsgZ2xvYmFsX2ludCA9IDM7IH0KK3N0cnVjdCBnZW5lcmF0ZV9maXZlX29iaiB7IGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gNTsgfSB9Oworc3RydWN0IGdlbmVyYXRlX3RocmVlX29iaiB7IGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gMzsgfSB9Oworc3RhdGljIGludCBnZW5lcmF0ZV9maXZlKCkgeyByZXR1cm4gNTsgfQorc3RhdGljIGludCBnZW5lcmF0ZV90aHJlZSgpIHsgcmV0dXJuIDM7IH0KK3N0YXRpYyBzdHJpbmcgaWRlbnRpdHlfc3RyKGNvbnN0IHN0cmluZyYgcykgeyByZXR1cm4gczsgfQorc3RhdGljIHN0cmluZyBzdHJpbmdfY2F0KGNvbnN0IHN0cmluZyYgczEsIGNvbnN0IHN0cmluZyYgczIpIHsgcmV0dXJuIHMxK3MyOyB9CitzdGF0aWMgaW50IHN1bV9pbnRzKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCt5OyB9CisKK3N0cnVjdCB3cml0ZV9jb25zdF8xX25vbmNvbnN0XzIKK3sKKyAgdm9pZCBvcGVyYXRvcigpKCkgeyBnbG9iYWxfaW50ID0gMjsgfQorICB2b2lkIG9wZXJhdG9yKCkoKSBjb25zdCB7IGdsb2JhbF9pbnQgPSAxOyB9Cit9OworCitzdHJ1Y3QgYWRkX3RvX29iagoreworICBhZGRfdG9fb2JqKGludCB2KSA6IHZhbHVlKHYpIHt9CisKKyAgaW50IG9wZXJhdG9yKCkoaW50IHgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlICsgeDsgfQorCisgIGludCB2YWx1ZTsKK307CisKK3N0YXRpYyB2b2lkCit0ZXN0X3plcm9fYXJncygpCit7CisgIHR5cGVkZWYgZnVuY3Rpb24wPHZvaWQ+IGZ1bmNfdm9pZF90eXBlOworCisgIHdyaXRlX2ZpdmVfb2JqIGZpdmUgPSB3cml0ZV9maXZlX29iaigpOyAvLyBJbml0aWFsaXphdGlvbiBmb3IgQm9ybGFuZCBDKysgNS41CisgIHdyaXRlX3RocmVlX29iaiB0aHJlZSA9IHdyaXRlX3RocmVlX29iaigpOyAvLyBEaXR0bworCisgIC8vIERlZmF1bHQgY29uc3RydWN0aW9uCisgIGZ1bmNfdm9pZF90eXBlIHYxOworICBCT09TVF9DSEVDSyh2MS5lbXB0eSgpKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCisgIHYxID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24gb2YgYSBmdW5jdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcigpIG1ldGhvZAorICB2MS5jbGVhcigpOworICBCT09TVF9DSEVDSyghdjEpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KKyAgdjEgPSB0aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24gYW5kIHNlbGYtYXNzaWdubWVudAorICBnbG9iYWxfaW50ID0gMDsKKyAgdjEgPSB2MTsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHYxID0gZml2ZTsKKworICAvLyBJbnZvY2F0aW9uIGFuZCBzZWxmLWFzc2lnbm1lbnQKKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYxID0gKHYxKTsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcgorICB2MSA9IDA7CisgIEJPT1NUX0NIRUNLKHYxLmVtcHR5KCkpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjEgPSAmd3JpdGVfZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYxKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MSA9ICZ3cml0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYxKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWdubWVudAorICB2MSA9IGZpdmU7CisgIEJPT1NUX0NIRUNLKCF2MS5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjEgPSB3cml0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYxKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQ29uc3RydWN0aW9uIGZyb20gYW5vdGhlciBmdW5jdGlvbiAodGhhdCBpcyBlbXB0eSkKKyAgdjEuY2xlYXIoKTsKKyAgZnVuY192b2lkX3R5cGUgdjIodjEpOworICBCT09TVF9DSEVDSyghdjI/IHRydWUgOiBmYWxzZSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgorICB2MiA9IHRocmVlOworICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjIoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHYyID0gKGZpdmUpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgdjIuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjIuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MiA9ICgmd3JpdGVfZml2ZSk7CisgIEJPT1NUX0NIRUNLKHYyPyB0cnVlIDogZmFsc2UpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MiA9ICZ3cml0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gU3dhcHBpbmcKKyAgdjEgPSBmaXZlOworICBzd2FwKHYxLCB2Mik7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisgIHYxKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisgIHN3YXAodjEsIHYyKTsKKyAgdjEuY2xlYXIoKTsKKworICAvLyBBc3NpZ25tZW50CisgIHYyID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MiA9ICZ3cml0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIGZ1bmN0aW9uIGZyb20gYW4gZW1wdHkgZnVuY3Rpb24KKyAgdjIgPSB2MTsKKyAgQk9PU1RfQ0hFQ0sodjIuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIGZ1bmN0aW9uIGZyb20gYSBmdW5jdGlvbiB3aXRoIGEgZnVuY3RvcgorICB2MSA9IHRocmVlOworICB2MiA9IHYxOworICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7CisgIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworICBnbG9iYWxfaW50ID0gMDsKKyAgdjIoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ24gdG8gYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3Rpb24gd2l0aCBhIGZ1bmN0aW9uCisgIHYyID0gJndyaXRlX2ZpdmU7CisgIHYxID0gdjI7CisgIEJPT1NUX0NIRUNLKCF2MS5lbXB0eSgpKTsKKyAgQk9PU1RfQ0hFQ0soIXYyLmVtcHR5KCkpOworICBnbG9iYWxfaW50ID0gMDsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQ29uc3RydWN0IGEgZnVuY3Rpb24gZ2l2ZW4gYW5vdGhlciBmdW5jdGlvbiBjb250YWluaW5nIGEgZnVuY3Rpb24KKyAgZnVuY192b2lkX3R5cGUgdjModjEpOworCisgIC8vIEludm9jYXRpb24gb2YgYSBmdW5jdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjMoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcigpIG1ldGhvZAorICB2My5jbGVhcigpOworICBCT09TVF9DSEVDSyghdjM/IHRydWUgOiBmYWxzZSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgorICB2MyA9IHRocmVlOworICBCT09TVF9DSEVDSyghdjMuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjMoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHYzID0gZml2ZTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkKKyAgdjMuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjMuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MyA9ICZ3cml0ZV9maXZlOworICBCT09TVF9DSEVDSyghdjMuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjMoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHYzID0gJndyaXRlX3RocmVlOworICBCT09TVF9DSEVDSyghdjMuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjMoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50CisgIHYzID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXYzLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYzKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQ29uc3RydWN0aW9uIG9mIGEgZnVuY3Rpb24gZnJvbSBhIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSBmdW5jdG9yCisgIGZ1bmNfdm9pZF90eXBlIHY0KHYzKTsKKworICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY0KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gY2xlYXIoKSBtZXRob2QKKyAgdjQuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjQuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgorICB2NCA9IHRocmVlOworICBCT09TVF9DSEVDSyghdjQuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjQoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHY0ID0gZml2ZTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NCgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkKKyAgdjQuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjQuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2NCA9ICZ3cml0ZV9maXZlOworICBCT09TVF9DSEVDSyghdjQuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjQoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHY0ID0gJndyaXRlX3RocmVlOworICBCT09TVF9DSEVDSyghdjQuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjQoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50CisgIHY0ID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXY0LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY0KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQ29uc3RydWN0aW9uIG9mIGEgZnVuY3Rpb24gZnJvbSBhIGZ1bmN0b3IKKyAgZnVuY192b2lkX3R5cGUgdjUoZml2ZSk7CisKKyAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkgbWV0aG9kCisgIHY1LmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKHY1LmVtcHR5KCkpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KKyAgdjUgPSB0aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXY1LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY1KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbgorICB2NSA9IGZpdmU7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjUoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcigpCisgIHY1LmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKHY1LmVtcHR5KCkpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjUgPSAmd3JpdGVfZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXY1LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY1KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2NSA9ICZ3cml0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXY1LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY1KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWdubWVudAorICB2NSA9IGZpdmU7CisgIEJPT1NUX0NIRUNLKCF2NS5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIENvbnN0cnVjdGlvbiBvZiBhIGZ1bmN0aW9uIGZyb20gYSBmdW5jdGlvbgorICBmdW5jX3ZvaWRfdHlwZSB2Nigmd3JpdGVfZml2ZSk7CisKKyAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkgbWV0aG9kCisgIHY2LmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKHY2LmVtcHR5KCkpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KKyAgdjYgPSB0aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXY2LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY2KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbgorICB2NiA9IGZpdmU7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjYoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcigpCisgIHY2LmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKHY2LmVtcHR5KCkpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjYgPSAmd3JpdGVfZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXY2LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY2KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2NiA9ICZ3cml0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXY2LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY2KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWdubWVudAorICB2NiA9IGZpdmU7CisgIEJPT1NUX0NIRUNLKCF2Ni5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIENvbnN0IHZzLiBub24tY29uc3QKKyAgLy8gSW5pdGlhbGl6YXRpb24gZm9yIEJvcmxhbmQgQysrIDUuNQorICB3cml0ZV9jb25zdF8xX25vbmNvbnN0XzIgb25lX29yX3R3byA9IHdyaXRlX2NvbnN0XzFfbm9uY29uc3RfMigpOyAKKyAgY29uc3QgZnVuY3Rpb24wPHZvaWQ+IHY3KG9uZV9vcl90d28pOworICBmdW5jdGlvbjA8dm9pZD4gdjgob25lX29yX3R3byk7CisKKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY3KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMik7CisKKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY4KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMik7CisKKyAgLy8gVGVzdCBjb25zdHJ1Y3Rpb24gZnJvbSAwIGFuZCBjb21wYXJpc29uIHRvIDAKKyAgZnVuY192b2lkX3R5cGUgdjkoMCk7CisgIEJPT1NUX0NIRUNLKHY5ID09IDApOworIyBpZiAhZGVmaW5lZChfX1NVTlBST19DQykgfHwgX19TVU5QUk9fQ0MgPiAweDU0MCB8fCBkZWZpbmVkKEJPT1NUX1NUUklDVF9DT05GSUcpCisgIEJPT1NUX0NIRUNLKDAgPT0gdjkpOworI2Vsc2UKKyAgQk9PU1RfQ0hFQ0sodjkuZW1wdHkoKSk7CisjZW5kaWYKKworICAvLyBUZXN0IHJldHVybiB2YWx1ZXMKKyAgdHlwZWRlZiBmdW5jdGlvbjA8aW50PiBmdW5jX2ludF90eXBlOworICAvLyBJbml0aWFsaXphdGlvbiBmb3IgQm9ybGFuZCBDKysgNS41CisgIGdlbmVyYXRlX2ZpdmVfb2JqIGdlbl9maXZlID0gZ2VuZXJhdGVfZml2ZV9vYmooKTsKKyAgZ2VuZXJhdGVfdGhyZWVfb2JqIGdlbl90aHJlZSA9IGdlbmVyYXRlX3RocmVlX29iaigpOworICBmdW5jX2ludF90eXBlIGkwKGdlbl9maXZlKTsKKworICBCT09TVF9DSEVDSyhpMCgpID09IDUpOworICBpMCA9IGdlbl90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soaTAoKSA9PSAzKTsKKyAgaTAgPSAmZ2VuZXJhdGVfZml2ZTsKKyAgQk9PU1RfQ0hFQ0soaTAoKSA9PSA1KTsKKyAgaTAgPSAmZ2VuZXJhdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKGkwKCkgPT0gMyk7CisgIEJPT1NUX0NIRUNLKGkwPyB0cnVlIDogZmFsc2UpOworICBpMC5jbGVhcigpOworICBCT09TVF9DSEVDSyghaTA/IHRydWUgOiBmYWxzZSk7CisKKyAgLy8gVGVzdCByZXR1cm4gdmFsdWVzIHdpdGggY29tcGF0aWJsZSB0eXBlcworICB0eXBlZGVmIGZ1bmN0aW9uMDxsb25nPiBmdW5jX2xvbmdfdHlwZTsKKyAgZnVuY19sb25nX3R5cGUgaTEoZ2VuX2ZpdmUpOworCisgIEJPT1NUX0NIRUNLKGkxKCkgPT0gNSk7CisgIGkxID0gZ2VuX3RocmVlOworICBCT09TVF9DSEVDSyhpMSgpID09IDMpOworICBpMSA9ICZnZW5lcmF0ZV9maXZlOworICBCT09TVF9DSEVDSyhpMSgpID09IDUpOworICBpMSA9ICZnZW5lcmF0ZV90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soaTEoKSA9PSAzKTsKKyAgQk9PU1RfQ0hFQ0soaTE/IHRydWUgOiBmYWxzZSk7CisgIGkxLmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKCFpMT8gdHJ1ZSA6IGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfb25lX2FyZygpCit7CisgIG5lZ2F0ZTxpbnQ+IG5lZyA9IG5lZ2F0ZTxpbnQ+KCk7IC8vIEluaXRpYWxpemF0aW9uIGZvciBCb3JsYW5kIEMrKyA1LjUKKworICBmdW5jdGlvbjE8aW50LCBpbnQ+IGYxKG5lZyk7CisgIEJPT1NUX0NIRUNLKGYxKDUpID09IC01KTsKKworICBmdW5jdGlvbjE8c3RyaW5nLCBzdHJpbmc+IGlkKCZpZGVudGl0eV9zdHIpOworICBCT09TVF9DSEVDSyhpZCgic3RyIikgPT0gInN0ciIpOworCisgIGZ1bmN0aW9uMTxzdGQ6OnN0cmluZywgY29uc3QgY2hhcio+IGlkMigmaWRlbnRpdHlfc3RyKTsKKyAgQk9PU1RfQ0hFQ0soaWQyKCJmb28iKSA9PSAiZm9vIik7CisKKyAgYWRkX3RvX29iaiBhZGRfdG8oNSk7CisgIGZ1bmN0aW9uMTxpbnQsIGludD4gZjIoYWRkX3RvKTsKKyAgQk9PU1RfQ0hFQ0soZjIoMykgPT0gOCk7CisKKyAgY29uc3QgZnVuY3Rpb24xPGludCwgaW50PiBjZjIoYWRkX3RvKTsKKyAgQk9PU1RfQ0hFQ0soY2YyKDMpID09IDgpOworfQorCitzdGF0aWMgdm9pZAordGVzdF90d29fYXJncygpCit7CisgIGZ1bmN0aW9uMjxzdHJpbmcsIGNvbnN0IHN0cmluZyYsIGNvbnN0IHN0cmluZyY+IGNhdCgmc3RyaW5nX2NhdCk7CisgIEJPT1NUX0NIRUNLKGNhdCgic3RyIiwgImluZyIpID09ICJzdHJpbmciKTsKKworICBmdW5jdGlvbjI8aW50LCBzaG9ydCwgc2hvcnQ+IHN1bSgmc3VtX2ludHMpOworICBCT09TVF9DSEVDSyhzdW0oMiwgMykgPT0gNSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2VtcHRpbmVzcygpCit7CisgIGZ1bmN0aW9uMDxmbG9hdD4gZjE7CisgIEJPT1NUX0NIRUNLKGYxLmVtcHR5KCkpOworCisgIGZ1bmN0aW9uMDxmbG9hdD4gZjI7CisgIGYyID0gZjE7CisgIEJPT1NUX0NIRUNLKGYyLmVtcHR5KCkpOworCisgIGZ1bmN0aW9uMDxkb3VibGU+IGYzOworICBmMyA9IGYyOworICBCT09TVF9DSEVDSyhmMy5lbXB0eSgpKTsKK30KKworc3RydWN0IFggeworICBYKGludCB2KSA6IHZhbHVlKHYpIHt9CisKKyAgaW50IHR3aWNlKCkgY29uc3QgeyByZXR1cm4gMip2YWx1ZTsgfQorICBpbnQgcGx1cyhpbnQgdikgeyByZXR1cm4gdmFsdWUgKyB2OyB9CisKKyAgaW50IHZhbHVlOworfTsKKworc3RhdGljIHZvaWQKK3Rlc3RfbWVtYmVyX2Z1bmN0aW9ucygpCit7CisKKyAgbmRuYm9vc3Q6OmZ1bmN0aW9uMTxpbnQsIFgqPiBmMSgmWDo6dHdpY2UpOworCisgIFggb25lKDEpOworICBYIGZpdmUoNSk7CisKKyAgQk9PU1RfQ0hFQ0soZjEoJm9uZSkgPT0gMik7CisgIEJPT1NUX0NIRUNLKGYxKCZmaXZlKSA9PSAxMCk7CisKKyAgbmRuYm9vc3Q6OmZ1bmN0aW9uMTxpbnQsIFgqPiBmMV8yOworICBmMV8yID0gJlg6OnR3aWNlOworCisgIEJPT1NUX0NIRUNLKGYxXzIoJm9uZSkgPT0gMik7CisgIEJPT1NUX0NIRUNLKGYxXzIoJmZpdmUpID09IDEwKTsKKworICBuZG5ib29zdDo6ZnVuY3Rpb24yPGludCwgWCYsIGludD4gZjIoJlg6OnBsdXMpOworICBCT09TVF9DSEVDSyhmMihvbmUsIDMpID09IDQpOworICBCT09TVF9DSEVDSyhmMihmaXZlLCA0KSA9PSA5KTsKK30KKworc3RydWN0IGFkZF93aXRoX3Rocm93X29uX2NvcHkgeworICBpbnQgb3BlcmF0b3IoKShpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHgreTsgfQorCisgIGFkZF93aXRoX3Rocm93X29uX2NvcHkoKSB7fQorCisgIGFkZF93aXRoX3Rocm93X29uX2NvcHkoY29uc3QgYWRkX3dpdGhfdGhyb3dfb25fY29weSYpCisgIHsKKyAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIkJ1dCB0aGlzIENBTidUIHRocm93Iik7CisgIH0KKworICBhZGRfd2l0aF90aHJvd19vbl9jb3B5JiBvcGVyYXRvcj0oY29uc3QgYWRkX3dpdGhfdGhyb3dfb25fY29weSYpCisgIHsKKyAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIkJ1dCB0aGlzIENBTidUIHRocm93Iik7CisgIH0KK307CisKK3N0YXRpYyB2b2lkCit0ZXN0X3JlZigpCit7CisgIGFkZF93aXRoX3Rocm93X29uX2NvcHkgYXRjOworICB0cnkgeworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjI8aW50LCBpbnQsIGludD4gZihyZWYoYXRjKSk7CisgICAgQk9PU1RfQ0hFQ0soZigxLCAzKSA9PSA0KTsKKyAgfQorICBjYXRjaChzdGQ6OnJ1bnRpbWVfZXJyb3IgZSkgeworICAgIEJPT1NUX0VSUk9SKCJOb250aHJvd2luZyBjb25zdHJ1Y3RvciB0aHJldyBhbiBleGNlcHRpb24iKTsKKyAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgY29uc3RydWN0aW9uX2NvdW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBkZXN0cnVjdGlvbl9jb3VudCA9IDA7CisKK3N0cnVjdCBNeVNtYWxsRnVuY3RvciB7CisgIE15U21hbGxGdW5jdG9yKCkgeyArK2NvbnN0cnVjdGlvbl9jb3VudDsgfQorICBNeVNtYWxsRnVuY3Rvcihjb25zdCBNeVNtYWxsRnVuY3RvciAmKSB7ICsrY29uc3RydWN0aW9uX2NvdW50OyB9CisgIH5NeVNtYWxsRnVuY3RvcigpIHsgKytkZXN0cnVjdGlvbl9jb3VudDsgfQorICBpbnQgb3BlcmF0b3IoKSgpIHsgcmV0dXJuIDA7IH0KKyB9OworCitzdHJ1Y3QgTXlMYXJnZUZ1bmN0b3IgeworICBNeUxhcmdlRnVuY3RvcigpIHsgKytjb25zdHJ1Y3Rpb25fY291bnQ7IH0KKyAgTXlMYXJnZUZ1bmN0b3IoY29uc3QgTXlMYXJnZUZ1bmN0b3IgJikgeyArK2NvbnN0cnVjdGlvbl9jb3VudDsgfQorICB+TXlMYXJnZUZ1bmN0b3IoKSB7ICsrZGVzdHJ1Y3Rpb25fY291bnQ7IH0KKyAgaW50IG9wZXJhdG9yKCkoKSB7IHJldHVybiAwOyB9CisKKyAgZmxvYXQgZGF0YVsxMjhdOworIH07CisKK3ZvaWQgdGVzdF9jb25zdHJ1Y3RfZGVzdHJveV9jb3VudCgpCit7CisgIHsKKyAgICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZjsKKyAgICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZzsKKyAgICBmID0gTXlTbWFsbEZ1bmN0b3IoKTsKKyAgICBnID0gTXlTbWFsbEZ1bmN0b3IoKTsKKyAgICBmLnN3YXAoZyk7CisgIH0KKworICAvLyBNeVNtYWxsRnVuY3RvciBvYmplY3RzIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBhcyBtYW55IHRpbWVzIGFzCisgIC8vIHRoZXkgYXJlIGRlc3Ryb3llZC4KKyAgQk9PU1RfQ0hFQ0soY29uc3RydWN0aW9uX2NvdW50ID09IGRlc3RydWN0aW9uX2NvdW50KTsKKyAKKyAgY29uc3RydWN0aW9uX2NvdW50ID0gMDsKKyAgZGVzdHJ1Y3Rpb25fY291bnQgPSAwOworICB7CisgICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxpbnQ+IGY7CisgICAgbmRuYm9vc3Q6OmZ1bmN0aW9uMDxpbnQ+IGc7CisgICAgZiA9IE15TGFyZ2VGdW5jdG9yKCk7CisgICAgZyA9IE15TGFyZ2VGdW5jdG9yKCk7CisgICAgZi5zd2FwKGcpOworICAgfQorCisgICAvLyBNeUxhcmdlRnVuY3RvciBvYmplY3RzIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBhcyBtYW55IHRpbWVzIGFzCisgICAvLyB0aGV5IGFyZSBkZXN0cm95ZWQuCisgICBCT09TVF9DSEVDSyhjb25zdHJ1Y3Rpb25fY291bnQgPT0gZGVzdHJ1Y3Rpb25fY291bnQpOworfQorCitpbnQgdGVzdF9tYWluKGludCwgY2hhciogW10pCit7CisgIHRlc3RfemVyb19hcmdzKCk7CisgIHRlc3Rfb25lX2FyZygpOworICB0ZXN0X3R3b19hcmdzKCk7CisgIHRlc3RfZW1wdGluZXNzKCk7CisgIHRlc3RfbWVtYmVyX2Z1bmN0aW9ucygpOworICB0ZXN0X3JlZigpOworICB0ZXN0X2NvbnN0cnVjdF9kZXN0cm95X2NvdW50KCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3JlZl9jeHg5OC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fcmVmX2N4eDk4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc5YzlkCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3JlZl9jeHg5OC5jcHAKQEAgLTAsMCArMSwyNyBAQAorLy8gRnVuY3Rpb24gbGlicmFyeQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgorCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLworCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKworc3RydWN0IHN0YXRlZnVsX3R5cGUgeyBpbnQgb3BlcmF0b3IoKShpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0gfTsKKworaW50IG1haW4oKQoreworICAgIHN0YXRlZnVsX3R5cGUgYV9mdW5jdGlvbl9vYmplY3Q7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKGludCk+IGY7CisgIGYgPSBuZG5ib29zdDo6cmVmKGFfZnVuY3Rpb25fb2JqZWN0KTsKKworICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChpbnQpPiBmMihmKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3JlZl9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fcmVmX3BvcnRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWM4NGEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3JlZl9wb3J0YWJsZS5jcHAKQEAgLTAsMCArMSwyNyBAQAorLy8gRnVuY3Rpb24gbGlicmFyeQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgorCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLworCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKworc3RydWN0IHN0YXRlZnVsX3R5cGUgeyBpbnQgb3BlcmF0b3IoKShpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0gfTsKKworaW50IG1haW4oKQoreworICAgIHN0YXRlZnVsX3R5cGUgYV9mdW5jdGlvbl9vYmplY3Q7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjE8aW50LCBpbnQ+IGY7CisgIGYgPSBuZG5ib29zdDo6cmVmKGFfZnVuY3Rpb25fb2JqZWN0KTsKKworICBuZG5ib29zdDo6ZnVuY3Rpb24xPGludCwgaW50PiBmMihmKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYzdjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAKQEAgLTAsMCArMSw3OTggQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCisvLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCisKKyNpbmNsdWRlIDxib29zdC90ZXN0L21pbmltYWwuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCit1c2luZyBuZG5ib29zdDo6ZnVuY3Rpb247Cit1c2luZyBzdGQ6OnN0cmluZzsKKworaW50IGdsb2JhbF9pbnQ7CisKK3N0cnVjdCB3cml0ZV9maXZlX29iaiB7IHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgZ2xvYmFsX2ludCA9IDU7IH0gfTsKK3N0cnVjdCB3cml0ZV90aHJlZV9vYmogeyBpbnQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgZ2xvYmFsX2ludCA9IDM7IHJldHVybiA3OyB9fTsKK3N0YXRpYyB2b2lkIHdyaXRlX2ZpdmUoKSB7IGdsb2JhbF9pbnQgPSA1OyB9CitzdGF0aWMgdm9pZCB3cml0ZV90aHJlZSgpIHsgZ2xvYmFsX2ludCA9IDM7IH0KK3N0cnVjdCBnZW5lcmF0ZV9maXZlX29iaiB7IGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gNTsgfSB9Oworc3RydWN0IGdlbmVyYXRlX3RocmVlX29iaiB7IGludCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gMzsgfSB9Oworc3RhdGljIGludCBnZW5lcmF0ZV9maXZlKCkgeyByZXR1cm4gNTsgfQorc3RhdGljIGludCBnZW5lcmF0ZV90aHJlZSgpIHsgcmV0dXJuIDM7IH0KK3N0YXRpYyBzdHJpbmcgaWRlbnRpdHlfc3RyKGNvbnN0IHN0cmluZyYgcykgeyByZXR1cm4gczsgfQorc3RhdGljIHN0cmluZyBzdHJpbmdfY2F0KGNvbnN0IHN0cmluZyYgczEsIGNvbnN0IHN0cmluZyYgczIpIHsgcmV0dXJuIHMxK3MyOyB9CitzdGF0aWMgaW50IHN1bV9pbnRzKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCt5OyB9CisKK3N0cnVjdCB3cml0ZV9jb25zdF8xX25vbmNvbnN0XzIKK3sKKyAgdm9pZCBvcGVyYXRvcigpKCkgeyBnbG9iYWxfaW50ID0gMjsgfQorICB2b2lkIG9wZXJhdG9yKCkoKSBjb25zdCB7IGdsb2JhbF9pbnQgPSAxOyB9Cit9OworCitzdHJ1Y3QgYWRkX3RvX29iagoreworICBhZGRfdG9fb2JqKGludCB2KSA6IHZhbHVlKHYpIHt9CisKKyAgaW50IG9wZXJhdG9yKCkoaW50IHgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlICsgeDsgfQorCisgIGludCB2YWx1ZTsKK307CisKK3N0YXRpYyB2b2lkCit0ZXN0X3plcm9fYXJncygpCit7CisgIHR5cGVkZWYgZnVuY3Rpb248dm9pZCAoKT4gZnVuY192b2lkX3R5cGU7CisKKyAgd3JpdGVfZml2ZV9vYmogZml2ZTsKKyAgd3JpdGVfdGhyZWVfb2JqIHRocmVlOworCisgIC8vIERlZmF1bHQgY29uc3RydWN0aW9uCisgIGZ1bmNfdm9pZF90eXBlIHYxOworICBCT09TVF9DSEVDSyh2MS5lbXB0eSgpKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCisgIHYxID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0sodjEgIT0gMCk7CisKKyAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkgbWV0aG9kCisgIHYxLmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKHYxID09IDApOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24KKyAgdjEgPSB0aHJlZTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24gYW5kIHNlbGYtYXNzaWdubWVudAorICBnbG9iYWxfaW50ID0gMDsKKyAgdjEgPSB2MTsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHYxID0gZml2ZTsKKworICAvLyBJbnZvY2F0aW9uIGFuZCBzZWxmLWFzc2lnbm1lbnQKKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYxID0gKHYxKTsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcgorICB2MSA9IDA7CisgIEJPT1NUX0NIRUNLKDAgPT0gdjEpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYW4gZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjEgPSBCT09TVF9GVU5DVElPTl9UQVJHRVRfRklYKCYpIHdyaXRlX2ZpdmU7CisgIEJPT1NUX0NIRUNLKDAgIT0gdjEpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYxKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MSA9IEJPT1NUX0ZVTkNUSU9OX1RBUkdFVF9GSVgoJikgd3JpdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2MS5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQKKyAgdjEgPSBmaXZlOworICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHYxID0gJndyaXRlX3RocmVlOworICBCT09TVF9DSEVDSyghdjEuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBDb25zdHJ1Y3Rpb24gZnJvbSBhbm90aGVyIGZ1bmN0aW9uICh0aGF0IGlzIGVtcHR5KQorICB2MS5jbGVhcigpOworICBmdW5jX3ZvaWRfdHlwZSB2Mih2MSk7CisgIEJPT1NUX0NIRUNLKCF2Mj8gdHJ1ZSA6IGZhbHNlKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCisgIHYyID0gdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KKyAgdjIgPSAoZml2ZSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjIoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICB2Mi5jbGVhcigpOworICBCT09TVF9DSEVDSyh2Mi5lbXB0eSgpKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHYyID0gKEJPT1NUX0ZVTkNUSU9OX1RBUkdFVF9GSVgoJikgd3JpdGVfZml2ZSk7CisgIEJPT1NUX0NIRUNLKHYyPyB0cnVlIDogZmFsc2UpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhIG5vbi1lbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2MiA9IEJPT1NUX0ZVTkNUSU9OX1RBUkdFVF9GSVgoJikgd3JpdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIFN3YXBwaW5nCisgIHYxID0gZml2ZTsKKyAgc3dhcCh2MSwgdjIpOworICB2MigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworICB2MSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworICBzd2FwKHYxLCB2Mik7CisgIHYxLmNsZWFyKCk7CisKKyAgLy8gQXNzaWdubWVudAorICB2MiA9IGZpdmU7CisgIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjIgPSAmd3JpdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2Mi5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBmdW5jdGlvbiBmcm9tIGFuIGVtcHR5IGZ1bmN0aW9uCisgIHYyID0gdjE7CisgIEJPT1NUX0NIRUNLKHYyLmVtcHR5KCkpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3Rpb24gd2l0aCBhIGZ1bmN0b3IKKyAgdjEgPSB0aHJlZTsKKyAgdjIgPSB2MTsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjEoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYyKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gMyk7CisKKyAgLy8gQXNzaWduIHRvIGEgZnVuY3Rpb24gZnJvbSBhIGZ1bmN0aW9uIHdpdGggYSBmdW5jdGlvbgorICB2MiA9IEJPT1NUX0ZVTkNUSU9OX1RBUkdFVF9GSVgoJikgd3JpdGVfZml2ZTsKKyAgdjEgPSB2MjsKKyAgQk9PU1RfQ0hFQ0soIXYxLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyghdjIuZW1wdHkoKSk7CisgIGdsb2JhbF9pbnQgPSAwOworICB2MSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworICBnbG9iYWxfaW50ID0gMDsKKyAgdjIoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBDb25zdHJ1Y3QgYSBmdW5jdGlvbiBnaXZlbiBhbm90aGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSBmdW5jdGlvbgorICBmdW5jX3ZvaWRfdHlwZSB2Myh2MSk7CisKKyAgLy8gSW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkgbWV0aG9kCisgIHYzLmNsZWFyKCk7CisgIEJPT1NUX0NIRUNLKCF2Mz8gdHJ1ZSA6IGZhbHNlKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCisgIHYzID0gdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KKyAgdjMgPSBmaXZlOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHYzKCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gY2xlYXIoKQorICB2My5jbGVhcigpOworICBCT09TVF9DSEVDSyh2My5lbXB0eSgpKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHYzID0gJndyaXRlX2ZpdmU7CisgIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjMgPSAmd3JpdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2My5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2MygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQKKyAgdjMgPSBmaXZlOworICBCT09TVF9DSEVDSyghdjMuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjMoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3Rpb24gY29udGFpbmluZyBhIGZ1bmN0b3IKKyAgZnVuY192b2lkX3R5cGUgdjQodjMpOworCisgIC8vIEludm9jYXRpb24gb2YgYSBmdW5jdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjQoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBjbGVhcigpIG1ldGhvZAorICB2NC5jbGVhcigpOworICBCT09TVF9DSEVDSyh2NC5lbXB0eSgpKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uCisgIHY0ID0gdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NCgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24KKyAgdjQgPSBmaXZlOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY0KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gY2xlYXIoKQorICB2NC5jbGVhcigpOworICBCT09TVF9DSEVDSyh2NC5lbXB0eSgpKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGFuIGVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHY0ID0gJndyaXRlX2ZpdmU7CisgIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NCgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIEFzc2lnbm1lbnQgdG8gYSBub24tZW1wdHkgZnVuY3Rpb24gZnJvbSBhIGZyZWUgZnVuY3Rpb24KKyAgdjQgPSAmd3JpdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKCF2NC5lbXB0eSgpKTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NCgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworCisgIC8vIEFzc2lnbm1lbnQKKyAgdjQgPSBmaXZlOworICBCT09TVF9DSEVDSyghdjQuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjQoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdW5jdGlvbiBmcm9tIGEgZnVuY3RvcgorICBmdW5jX3ZvaWRfdHlwZSB2NShmaXZlKTsKKworICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY1KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gY2xlYXIoKSBtZXRob2QKKyAgdjUuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjUuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgorICB2NSA9IHRocmVlOworICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjUoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHY1ID0gZml2ZTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NSgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkKKyAgdjUuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjUuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2NSA9ICZ3cml0ZV9maXZlOworICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjUoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHY1ID0gJndyaXRlX3RocmVlOworICBCT09TVF9DSEVDSyghdjUuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjUoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50CisgIHY1ID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXY1LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY1KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQ29uc3RydWN0aW9uIG9mIGEgZnVuY3Rpb24gZnJvbSBhIGZ1bmN0aW9uCisgIGZ1bmNfdm9pZF90eXBlIHY2KCZ3cml0ZV9maXZlKTsKKworICAvLyBJbnZvY2F0aW9uIG9mIGEgZnVuY3Rpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY2KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gY2xlYXIoKSBtZXRob2QKKyAgdjYuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjYuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbgorICB2NiA9IHRocmVlOworICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjYoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uCisgIHY2ID0gZml2ZTsKKworICAvLyBJbnZvY2F0aW9uCisgIGdsb2JhbF9pbnQgPSAwOworICB2NigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDUpOworCisgIC8vIGNsZWFyKCkKKyAgdjYuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0sodjYuZW1wdHkoKSk7CisKKyAgLy8gQXNzaWdubWVudCB0byBhbiBlbXB0eSBmdW5jdGlvbiBmcm9tIGEgZnJlZSBmdW5jdGlvbgorICB2NiA9ICZ3cml0ZV9maXZlOworICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjYoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSA1KTsKKworICAvLyBBc3NpZ25tZW50IHRvIGEgbm9uLWVtcHR5IGZ1bmN0aW9uIGZyb20gYSBmcmVlIGZ1bmN0aW9uCisgIHY2ID0gJndyaXRlX3RocmVlOworICBCT09TVF9DSEVDSyghdjYuZW1wdHkoKSk7CisKKyAgLy8gSW52b2NhdGlvbgorICBnbG9iYWxfaW50ID0gMDsKKyAgdjYoKTsKKyAgQk9PU1RfQ0hFQ0soZ2xvYmFsX2ludCA9PSAzKTsKKworICAvLyBBc3NpZ25tZW50CisgIHY2ID0gZml2ZTsKKyAgQk9PU1RfQ0hFQ0soIXY2LmVtcHR5KCkpOworCisgIC8vIEludm9jYXRpb24KKyAgZ2xvYmFsX2ludCA9IDA7CisgIHY2KCk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisKKyAgLy8gQ29uc3QgdnMuIG5vbi1jb25zdAorICB3cml0ZV9jb25zdF8xX25vbmNvbnN0XzIgb25lX29yX3R3bzsKKyAgY29uc3QgZnVuY3Rpb248dm9pZCAoKT4gdjcob25lX29yX3R3byk7CisgIGZ1bmN0aW9uPHZvaWQgKCk+IHY4KG9uZV9vcl90d28pOworCisgIGdsb2JhbF9pbnQgPSAwOworICB2NygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDIpOworCisgIGdsb2JhbF9pbnQgPSAwOworICB2OCgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDIpOworCisgIC8vIFRlc3QgY29uc3RydWN0aW9uIGZyb20gMCBhbmQgY29tcGFyaXNvbiB0byAwCisgIGZ1bmNfdm9pZF90eXBlIHY5KDApOworICBCT09TVF9DSEVDSyh2OSA9PSAwKTsKKyAgQk9PU1RfQ0hFQ0soMCA9PSB2OSk7CisKKyAgLy8gVGVzdCByZXR1cm4gdmFsdWVzCisgIHR5cGVkZWYgZnVuY3Rpb248aW50ICgpPiBmdW5jX2ludF90eXBlOworICBnZW5lcmF0ZV9maXZlX29iaiBnZW5fZml2ZTsKKyAgZ2VuZXJhdGVfdGhyZWVfb2JqIGdlbl90aHJlZTsKKworICBmdW5jX2ludF90eXBlIGkwKGdlbl9maXZlKTsKKworICBCT09TVF9DSEVDSyhpMCgpID09IDUpOworICBpMCA9IGdlbl90aHJlZTsKKyAgQk9PU1RfQ0hFQ0soaTAoKSA9PSAzKTsKKyAgaTAgPSAmZ2VuZXJhdGVfZml2ZTsKKyAgQk9PU1RfQ0hFQ0soaTAoKSA9PSA1KTsKKyAgaTAgPSAmZ2VuZXJhdGVfdGhyZWU7CisgIEJPT1NUX0NIRUNLKGkwKCkgPT0gMyk7CisgIEJPT1NUX0NIRUNLKGkwPyB0cnVlIDogZmFsc2UpOworICBpMC5jbGVhcigpOworICBCT09TVF9DSEVDSyghaTA/IHRydWUgOiBmYWxzZSk7CisKKyAgLy8gVGVzdCByZXR1cm4gdmFsdWVzIHdpdGggY29tcGF0aWJsZSB0eXBlcworICB0eXBlZGVmIGZ1bmN0aW9uPGxvbmcgKCk+IGZ1bmNfbG9uZ190eXBlOworICBmdW5jX2xvbmdfdHlwZSBpMShnZW5fZml2ZSk7CisKKyAgQk9PU1RfQ0hFQ0soaTEoKSA9PSA1KTsKKyAgaTEgPSBnZW5fdGhyZWU7CisgIEJPT1NUX0NIRUNLKGkxKCkgPT0gMyk7CisgIGkxID0gJmdlbmVyYXRlX2ZpdmU7CisgIEJPT1NUX0NIRUNLKGkxKCkgPT0gNSk7CisgIGkxID0gJmdlbmVyYXRlX3RocmVlOworICBCT09TVF9DSEVDSyhpMSgpID09IDMpOworICBCT09TVF9DSEVDSyhpMT8gdHJ1ZSA6IGZhbHNlKTsKKyAgaTEuY2xlYXIoKTsKKyAgQk9PU1RfQ0hFQ0soIWkxPyB0cnVlIDogZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9vbmVfYXJnKCkKK3sKKyAgc3RkOjpuZWdhdGU8aW50PiBuZWc7CisKKyAgZnVuY3Rpb248aW50IChpbnQpPiBmMShuZWcpOworICBCT09TVF9DSEVDSyhmMSg1KSA9PSAtNSk7CisKKyAgZnVuY3Rpb248c3RyaW5nIChzdHJpbmcpPiBpZCgmaWRlbnRpdHlfc3RyKTsKKyAgQk9PU1RfQ0hFQ0soaWQoInN0ciIpID09ICJzdHIiKTsKKworICBmdW5jdGlvbjxzdHJpbmcgKGNvbnN0IGNoYXIqKT4gaWQyKCZpZGVudGl0eV9zdHIpOworICBCT09TVF9DSEVDSyhpZDIoImZvbyIpID09ICJmb28iKTsKKworICBhZGRfdG9fb2JqIGFkZF90byg1KTsKKyAgZnVuY3Rpb248aW50IChpbnQpPiBmMihhZGRfdG8pOworICBCT09TVF9DSEVDSyhmMigzKSA9PSA4KTsKKworICBjb25zdCBmdW5jdGlvbjxpbnQgKGludCk+IGNmMihhZGRfdG8pOworICBCT09TVF9DSEVDSyhjZjIoMykgPT0gOCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3R3b19hcmdzKCkKK3sKKyAgZnVuY3Rpb248c3RyaW5nIChjb25zdCBzdHJpbmcmLCBjb25zdCBzdHJpbmcmKT4gY2F0KCZzdHJpbmdfY2F0KTsKKyAgQk9PU1RfQ0hFQ0soY2F0KCJzdHIiLCAiaW5nIikgPT0gInN0cmluZyIpOworCisgIGZ1bmN0aW9uPGludCAoc2hvcnQsIHNob3J0KT4gc3VtKCZzdW1faW50cyk7CisgIEJPT1NUX0NIRUNLKHN1bSgyLCAzKSA9PSA1KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZW1wdGluZXNzKCkKK3sKKyAgZnVuY3Rpb248ZmxvYXQgKCk+IGYxOworICBCT09TVF9DSEVDSyhmMS5lbXB0eSgpKTsKKworICBmdW5jdGlvbjxmbG9hdCAoKT4gZjI7CisgIGYyID0gZjE7CisgIEJPT1NUX0NIRUNLKGYyLmVtcHR5KCkpOworCisgIGZ1bmN0aW9uPGRvdWJsZSAoKT4gZjM7CisgIGYzID0gZjI7CisgIEJPT1NUX0NIRUNLKGYzLmVtcHR5KCkpOworfQorCitzdHJ1Y3QgWCB7CisgIFgoaW50IHYpIDogdmFsdWUodikge30KKworICBpbnQgdHdpY2UoKSBjb25zdCB7IHJldHVybiAyKnZhbHVlOyB9CisgIGludCBwbHVzKGludCB2KSB7IHJldHVybiB2YWx1ZSArIHY7IH0KKworICBpbnQgdmFsdWU7Cit9OworCitzdGF0aWMgdm9pZAordGVzdF9tZW1iZXJfZnVuY3Rpb25zKCkKK3sKKyAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoWCopPiBmMSgmWDo6dHdpY2UpOworCisgIFggb25lKDEpOworICBYIGZpdmUoNSk7CisKKyAgQk9PU1RfQ0hFQ0soZjEoJm9uZSkgPT0gMik7CisgIEJPT1NUX0NIRUNLKGYxKCZmaXZlKSA9PSAxMCk7CisKKyAgbmRuYm9vc3Q6OmZ1bmN0aW9uPGludCAoWCopPiBmMV8yOworICBmMV8yID0gJlg6OnR3aWNlOworCisgIEJPT1NUX0NIRUNLKGYxXzIoJm9uZSkgPT0gMik7CisgIEJPT1NUX0NIRUNLKGYxXzIoJmZpdmUpID09IDEwKTsKKworICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChYJiwgaW50KT4gZjIoJlg6OnBsdXMpOworICBCT09TVF9DSEVDSyhmMihvbmUsIDMpID09IDQpOworICBCT09TVF9DSEVDSyhmMihmaXZlLCA0KSA9PSA5KTsKK30KKworc3RydWN0IGFkZF93aXRoX3Rocm93X29uX2NvcHkgeworICBpbnQgb3BlcmF0b3IoKShpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHgreTsgfQorCisgIGFkZF93aXRoX3Rocm93X29uX2NvcHkoKSB7fQorCisgIGFkZF93aXRoX3Rocm93X29uX2NvcHkoY29uc3QgYWRkX3dpdGhfdGhyb3dfb25fY29weSYpCisgIHsKKyAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIkJ1dCB0aGlzIENBTidUIHRocm93Iik7CisgIH0KKworICBhZGRfd2l0aF90aHJvd19vbl9jb3B5JiBvcGVyYXRvcj0oY29uc3QgYWRkX3dpdGhfdGhyb3dfb25fY29weSYpCisgIHsKKyAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIkJ1dCB0aGlzIENBTidUIHRocm93Iik7CisgIH0KK307CisKK3N0YXRpYyB2b2lkCit0ZXN0X3JlZigpCit7CisgIGFkZF93aXRoX3Rocm93X29uX2NvcHkgYXRjOworICB0cnkgeworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKGludCwgaW50KT4gZihuZG5ib29zdDo6cmVmKGF0YykpOworICAgIEJPT1NUX0NIRUNLKGYoMSwgMykgPT0gNCk7CisgIH0KKyAgY2F0Y2goc3RkOjpydW50aW1lX2Vycm9yIGUpIHsKKyAgICBCT09TVF9FUlJPUigiTm9udGhyb3dpbmcgY29uc3RydWN0b3IgdGhyZXcgYW4gZXhjZXB0aW9uIik7CisgIH0KK30KKworc3RhdGljIHZvaWQgZHVtbXkoKSB7fQorCitzdGF0aWMgdm9pZCB0ZXN0X2VtcHR5X3JlZigpCit7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjx2b2lkKCk+IGYxOworICBuZG5ib29zdDo6ZnVuY3Rpb248dm9pZCgpPiBmMihuZG5ib29zdDo6cmVmKGYxKSk7CisKKyAgdHJ5IHsKKyAgICBmMigpOworICAgIEJPT1NUX0VSUk9SKCJFeGNlcHRpb24gZGlkbid0IHRocm93IGZvciByZWZlcmVuY2UgdG8gZW1wdHkgZnVuY3Rpb24uIik7CisgIH0KKyAgY2F0Y2goc3RkOjpydW50aW1lX2Vycm9yIGUpIHt9CisKKyAgZjEgPSBkdW1teTsKKworICB0cnkgeworICAgIGYyKCk7CisgIH0KKyAgY2F0Y2goc3RkOjpydW50aW1lX2Vycm9yIGUpIHsKKyAgICBCT09TVF9FUlJPUigiRXJyb3IgY2FsbGluZyByZWZlcmVuY2VkIGZ1bmN0aW9uLiIpOworICB9Cit9CisKKworc3RhdGljIHZvaWQgdGVzdF9leGNlcHRpb24oKQoreworICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChpbnQsIGludCk+IGY7CisgIHRyeSB7CisgICAgZig1LCA0KTsKKyAgICBCT09TVF9DSEVDSyhmYWxzZSk7CisgIH0KKyAgY2F0Y2gobmRuYm9vc3Q6OmJhZF9mdW5jdGlvbl9jYWxsKSB7CisgICAgLy8gb2theQorICB9Cit9CisKK3R5cGVkZWYgbmRuYm9vc3Q6OmZ1bmN0aW9uPCB2b2lkICogKHZvaWQgKiByZWFkZXIpID4gcmVhZGVyX3R5cGU7Cit0eXBlZGVmIHN0ZDo6cGFpcjxpbnQsIHJlYWRlcl90eXBlPiBtYXBwZWRfdHlwZTsKKworc3RhdGljIHZvaWQgdGVzdF9pbXBsaWNpdCgpCit7CisgIG1hcHBlZF90eXBlIG07CisgIG0gPSBtYXBwZWRfdHlwZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2NhbGxfb2JqKG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKGludCwgaW50KT4gZikKK3sKKyAgQk9PU1RfQ0hFQ0soIWYuZW1wdHkoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY2FsbF9jcmVmKGNvbnN0IG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKGludCwgaW50KT4mIGYpCit7CisgIEJPT1NUX0NIRUNLKCFmLmVtcHR5KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2NhbGwoKQoreworICB0ZXN0X2NhbGxfb2JqKHN0ZDo6cGx1czxpbnQ+KCkpOworICB0ZXN0X2NhbGxfY3JlZihzdGQ6OnBsdXM8aW50PigpKTsKK30KKworc3RydWN0IGJpZ19hZ2dyZWdhdGluZ19zdHJ1Y3R1cmUgeworICBpbnQgZGlzYWJsZV9zbWFsbF9vYmplY3RzX29wdGltaXphdGlvbnNbMzJdOworICAgIAorICBiaWdfYWdncmVnYXRpbmdfc3RydWN0dXJlKCkKKyAgeworICAgICsrIGdsb2JhbF9pbnQ7CisgIH0KKyAgICAKKyAgYmlnX2FnZ3JlZ2F0aW5nX3N0cnVjdHVyZShjb25zdCBiaWdfYWdncmVnYXRpbmdfc3RydWN0dXJlJikKKyAgeworICAgICsrIGdsb2JhbF9pbnQ7CisgIH0KKworICB+YmlnX2FnZ3JlZ2F0aW5nX3N0cnVjdHVyZSgpCisgIHsKKyAgICAtLSBnbG9iYWxfaW50OworICB9CisgICAgCisgIHZvaWQgb3BlcmF0b3IoKSgpIAorICB7CisgICAgKysgZ2xvYmFsX2ludDsKKyAgfQorCisgIHZvaWQgb3BlcmF0b3IoKShpbnQpIAorICB7CisgICAgKysgZ2xvYmFsX2ludDsKKyAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZ1bmN0aW9uVD4KK3N0YXRpYyB2b2lkIHRlc3RfbW92ZV9zZW1hbnRpY3MoKSAKK3sKKyAgdHlwZWRlZiBGdW5jdGlvblQgZjFfdHlwZTsKKworICBiaWdfYWdncmVnYXRpbmdfc3RydWN0dXJlIG9iajsKKyAgCisgIGYxX3R5cGUgZjEgPSBvYmo7CisgIGdsb2JhbF9pbnQgPSAwOworICBmMSgpOworICAKKyAgQk9PU1RfQ0hFQ0soIWYxLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDEpOworICAKKyNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKKyAgLy8gVGVzdGluZyBydmFsdWUgY29uc3RydWN0b3JzCisgIGYxX3R5cGUgZjIoc3RhdGljX2Nhc3Q8ZjFfdHlwZSYmPihmMSkpOworICBCT09TVF9DSEVDSyhmMS5lbXB0eSgpKTsKKyAgQk9PU1RfQ0hFQ0soIWYyLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDEpOworICBmMigpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDIpOworICAKKyAgZjFfdHlwZSBmMyhzdGF0aWNfY2FzdDxmMV90eXBlJiY+KGYyKSk7CisgIEJPT1NUX0NIRUNLKGYxLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyhmMi5lbXB0eSgpKTsKKyAgQk9PU1RfQ0hFQ0soIWYzLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDIpOworICBmMygpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworICAgIAorICAvLyBUZXN0aW5nIG1vdmUgYXNzaWdubWVudAorICBmMV90eXBlIGY0OworICBCT09TVF9DSEVDSyhmNC5lbXB0eSgpKTsKKyAgZjQgPSBzdGF0aWNfY2FzdDxmMV90eXBlJiY+KGYzKTsKKyAgQk9PU1RfQ0hFQ0soZjEuZW1wdHkoKSk7CisgIEJPT1NUX0NIRUNLKGYyLmVtcHR5KCkpOworICBCT09TVF9DSEVDSyhmMy5lbXB0eSgpKTsKKyAgQk9PU1RfQ0hFQ0soIWY0LmVtcHR5KCkpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDMpOworICBmNCgpOworICBCT09TVF9DSEVDSyhnbG9iYWxfaW50ID09IDQpOworICAKKyAgLy8gVGVzdGluZyBzZWxmIG1vdmUgYXNzaWdubWVudAorICBmNCA9IHN0YXRpY19jYXN0PGYxX3R5cGUmJj4oZjQpOworICBCT09TVF9DSEVDSyghZjQuZW1wdHkoKSk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNCk7CisKKyAgLy8gVGVzdGluZywgdGhhdCBubyBtZW1vcnkgbGVha2VkIHdoZW4gYXNzaWduaW5nIHRvIG5vbmVtcHR5IGZ1bmN0aW9uCisgIGY0ID0gb2JqOworICBCT09TVF9DSEVDSyghZjQuZW1wdHkoKSk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNCk7CisgIGYxX3R5cGUgZjUgPSBvYmo7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNSk7CisgIGY0ID0gc3RhdGljX2Nhc3Q8ZjFfdHlwZSYmPihmNSk7CisgIEJPT1NUX0NIRUNLKGdsb2JhbF9pbnQgPT0gNCk7CisgIAorI2VuZGlmICAKK30KKworaW50IHRlc3RfbWFpbihpbnQsIGNoYXIqIFtdKQoreworICB0ZXN0X3plcm9fYXJncygpOworICB0ZXN0X29uZV9hcmcoKTsKKyAgdGVzdF90d29fYXJncygpOworICB0ZXN0X2VtcHRpbmVzcygpOworICB0ZXN0X21lbWJlcl9mdW5jdGlvbnMoKTsKKyAgdGVzdF9yZWYoKTsKKyAgdGVzdF9lbXB0eV9yZWYoKTsKKyAgdGVzdF9leGNlcHRpb24oKTsKKyAgdGVzdF9pbXBsaWNpdCgpOworICB0ZXN0X2NhbGwoKTsKKyAgdGVzdF9tb3ZlX3NlbWFudGljczxmdW5jdGlvbjx2b2lkKCk+ID4oKTsKKyAgdGVzdF9tb3ZlX3NlbWFudGljczxuZG5ib29zdDo6ZnVuY3Rpb24wPHZvaWQ+ID4oKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwxLmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwxLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWZjODA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDEuY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKKworLy8gIENvcHlyaWdodCAoQykgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDA1LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKKy8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgorLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZworCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgbmRuYm9vc3Q7CisKK2ludAordGVzdF9tYWluKGludCwgY2hhcipbXSkKK3sKKyAgZnVuY3Rpb24wPGludD4gZjE7CisgIGZ1bmN0aW9uMDxpbnQ+IGYyOworCisgIGlmIChmMSA9PSBmMikgeworICB9CisKKyAgQk9PU1RfRVJST1IoIlRoaXMgc2hvdWxkIG5vdCBoYXZlIGNvbXBpbGVkLiIpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDIuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3Rlc3RfZmFpbDIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNGMwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdGVzdF9mYWlsMi5jcHAKQEAgLTAsMCArMSwyNyBAQAorLy8gQm9vc3QuRnVuY3Rpb24gbGlicmFyeQorCisvLyAgQ29weXJpZ2h0IChDKSBEb3VnbGFzIEdyZWdvciAyMDAxLTIwMDUuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCisvLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCisKKyNpbmNsdWRlIDxib29zdC90ZXN0L21pbmltYWwuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBuZG5ib29zdDsKKworc3RhdGljIGludCBiYWRfZm4oZmxvYXQgZikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihmKTsgfQorCitpbnQKK3Rlc3RfbWFpbihpbnQsIGNoYXIqW10pCit7CisgIGZ1bmN0aW9uMDxpbnQ+IGYxOworICBmMSA9IGJhZF9mbjsKKworICBCT09TVF9FUlJPUigiVGhpcyBzaG91bGQgbm90IGhhdmUgY29tcGlsZWQuIik7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fdHlwZW9mX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3R5cGVvZl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmQwZDlkCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L2Z1bmN0aW9uX3R5cGVvZl90ZXN0LmNwcApAQCAtMCwwICsxLDE4IEBACisvLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5CisKKy8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwOC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCisvLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KKy8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi9mdW5jdGlvbl90eXBlb2YuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxib29zdC90eXBlb2YvdHlwZW9mLmhwcD4KKyNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KKyNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4KKwordm9pZCBmKG5kbmJvb3N0OjpmdW5jdGlvbjA8dm9pZD4gZiwgbmRuYm9vc3Q6OmZ1bmN0aW9uMDx2b2lkPiBnKQoreworICBCT09TVF9TVEFUSUNfQVNTRVJUKChuZG5ib29zdDo6aXNfc2FtZTxuZG5ib29zdDo6ZnVuY3Rpb24wPHZvaWQ+LCBCT09TVF9UWVBFT0YoZiA9IGcpPjo6dmFsdWUpKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9sYW1iZGFfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvbGFtYmRhX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjgxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvbGFtYmRhX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDAyLTIwMDMuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAorLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCisvLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KKyNpbmNsdWRlIDxib29zdC9sYW1iZGEvbGFtYmRhLmhwcD4KKyNpbmNsdWRlIDxib29zdC9sYW1iZGEvYmluZC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorCitzdGF0aWMgdW5zaWduZWQKK2Z1bmNfaW1wbChpbnQgYXJnMSwgYm9vbCBhcmcyLCBkb3VibGUgYXJnMykKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgcmV0dXJuIGFicyAoc3RhdGljX2Nhc3Q8aW50PigoYXJnMiA/IGFyZzEgOiAyICogYXJnMSkgKiBhcmczKSk7Cit9CisKK2ludCB0ZXN0X21haW4oaW50LCBjaGFyKltdKQoreworICB1c2luZyBuZG5ib29zdDo6ZnVuY3Rpb247CisgIHVzaW5nIG5hbWVzcGFjZSBuZG5ib29zdDo6bGFtYmRhOworCisgIGZ1bmN0aW9uIDx1bnNpZ25lZChib29sLCBkb3VibGUpPiBmMSA9IGJpbmQoZnVuY19pbXBsLCAxNSwgXzEsIF8yKTsKKyAgZnVuY3Rpb24gPHVuc2lnbmVkKGRvdWJsZSk+ICAgICAgIGYyID0gbmRuYm9vc3Q6OmxhbWJkYTo6YmluZChmMSwgZmFsc2UsIF8xKTsKKyAgZnVuY3Rpb24gPHVuc2lnbmVkKCk+ICAgICAgICAgICAgIGYzID0gbmRuYm9vc3Q6OmxhbWJkYTo6YmluZChmMiwgNC4wKTsKKworICBmMygpOworCisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9jeHg5OC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9jeHg5OC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1YmFhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb24vdGVzdC9tZW1fZnVuX2N4eDk4LmNwcApAQCAtMCwwICsxLDM3IEBACisvLyBGdW5jdGlvbiBsaWJyYXJ5CisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIERvdWdsYXMgR3JlZ29yCisKKy8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCisvLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKKy8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgCisKKy8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvCisKKyAgICAKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisKK3N0cnVjdCBYIHsKKyAgaW50IGZvbyhpbnQpOworICBzdGQ6Om9zdHJlYW0mIGZvbzIoc3RkOjpvc3RyZWFtJikgY29uc3Q7Cit9OworaW50IFg6OmZvbyhpbnQgeCkgeyByZXR1cm4gLXg7IH0KK3N0ZDo6b3N0cmVhbSYgWDo6Zm9vMihzdGQ6Om9zdHJlYW0mIHgpIGNvbnN0IHsgcmV0dXJuIHg7IH0KKworaW50IG1haW4oKQoreworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjxpbnQgKFgqLCBpbnQpPiBmOworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjxzdGQ6Om9zdHJlYW0mIChYKiwgc3RkOjpvc3RyZWFtJik+IGYyOworCisgICAgZiA9ICZYOjpmb287CisgICAgZjIgPSAmWDo6Zm9vMjsKKworICAgIFggeDsKKyAgICBCT09TVF9URVNUKGYoJngsIDUpID09IC01KTsKKyAgICBCT09TVF9URVNUKGYyKCZ4LCBuZG5ib29zdDo6cmVmKHN0ZDo6Y291dCkpID09IHN0ZDo6Y291dCk7CisKKyAgICByZXR1cm4gOjpuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L21lbV9mdW5fcG9ydGFibGUuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L21lbV9mdW5fcG9ydGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGY3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvbWVtX2Z1bl9wb3J0YWJsZS5jcHAKQEAgLTAsMCArMSwzNyBAQAorLy8gRnVuY3Rpb24gbGlicmFyeQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgorCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLworCisgICAgCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorCitzdHJ1Y3QgWCB7CisgIGludCBmb28oaW50KTsKKyAgc3RkOjpvc3RyZWFtJiBmb28yKHN0ZDo6b3N0cmVhbSYpIGNvbnN0OworfTsKK2ludCBYOjpmb28oaW50IHgpIHsgcmV0dXJuIC14OyB9CitzdGQ6Om9zdHJlYW0mIFg6OmZvbzIoc3RkOjpvc3RyZWFtJiB4KSBjb25zdCB7IHJldHVybiB4OyB9CisKK2ludCBtYWluKCkKK3sKKyAgICBuZG5ib29zdDo6ZnVuY3Rpb24yPGludCwgWCosIGludD4gZjsKKyAgICBuZG5ib29zdDo6ZnVuY3Rpb24yPHN0ZDo6b3N0cmVhbSYsIFgqLCBzdGQ6Om9zdHJlYW0mPiBmMjsKKworICAgIGYgPSAmWDo6Zm9vOworICAgIGYyID0gJlg6OmZvbzI7CisKKyAgICBYIHg7CisgICAgQk9PU1RfVEVTVChmKCZ4LCA1KSA9PSAtNSk7CisgICAgQk9PU1RfVEVTVChmMigmeCwgbmRuYm9vc3Q6OnJlZihzdGQ6OmNvdXQpKSA9PSBzdGQ6OmNvdXQpOworCisgICAgcmV0dXJuIDo6bmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9ub3Rocm93X3N3YXAuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L25vdGhyb3dfc3dhcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4ZDA1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb24vdGVzdC9ub3Rocm93X3N3YXAuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8vIEJvb3N0LkZ1bmN0aW9uIGxpYnJhcnkKKworLy8gIENvcHlyaWdodCBEb3VnbGFzIEdyZWdvciAyMDA4LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKKy8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgorLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZworCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisKK3N0cnVjdCB0cmllZF90b19jb3B5IHsgfTsKKworc3RydWN0IE1heWJlVGhyb3dPbkNvcHkgeworICBNYXliZVRocm93T25Db3B5KGludCB2YWx1ZSA9IDApIDogdmFsdWUodmFsdWUpIHsgfQorCisgIE1heWJlVGhyb3dPbkNvcHkoY29uc3QgTWF5YmVUaHJvd09uQ29weSYgb3RoZXIpIDogdmFsdWUob3RoZXIudmFsdWUpIHsKKyAgICBpZiAodGhyb3dPbkNvcHkpCisgICAgICB0aHJvdyB0cmllZF90b19jb3B5KCk7CisgIH0KKworICBNYXliZVRocm93T25Db3B5JiBvcGVyYXRvcj0oY29uc3QgTWF5YmVUaHJvd09uQ29weSYgb3RoZXIpIHsKKyAgICBpZiAodGhyb3dPbkNvcHkpCisgICAgICB0aHJvdyB0cmllZF90b19jb3B5KCk7CisgICAgdmFsdWUgPSBvdGhlci52YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBpbnQgb3BlcmF0b3IoKSgpIHsgcmV0dXJuIHZhbHVlOyB9CisKKyAgaW50IHZhbHVlOworCisgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24gb2JqZWN0IGRvZXNuJ3QgdHJpZ2dlciB0aGUKKyAgLy8gc21hbGwtb2JqZWN0IG9wdGltaXphdGlvbiBpbiBGdW5jdGlvbi4KKyAgZmxvYXQgcGFkZGluZ1sxMDBdOworCisgIHN0YXRpYyBib29sIHRocm93T25Db3B5OworfTsKKworYm9vbCBNYXliZVRocm93T25Db3B5Ojp0aHJvd09uQ29weSA9IGZhbHNlOworCitpbnQgdGVzdF9tYWluKGludCwgY2hhciogW10pCit7CisgIG5kbmJvb3N0OjpmdW5jdGlvbjA8aW50PiBmOworICBuZG5ib29zdDo6ZnVuY3Rpb24wPGludD4gZzsKKworICBNYXliZVRocm93T25Db3B5Ojp0aHJvd09uQ29weSA9IGZhbHNlOworICBmID0gTWF5YmVUaHJvd09uQ29weSgxKTsKKyAgZyA9IE1heWJlVGhyb3dPbkNvcHkoMik7CisgIEJPT1NUX0NIRUNLKGYoKSA9PSAxKTsKKyAgQk9PU1RfQ0hFQ0soZygpID09IDIpOworCisgIE1heWJlVGhyb3dPbkNvcHk6OnRocm93T25Db3B5ID0gdHJ1ZTsKKyAgZi5zd2FwKGcpOworICBCT09TVF9DSEVDSyhmKCkgPT0gMik7CisgIEJPT1NUX0NIRUNLKGcoKSA9PSAxKTsKKyAgCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L3JlZ3Jlc3Npb24uY2ZnIGIvbGlicy9mdW5jdGlvbi90ZXN0L3JlZ3Jlc3Npb24uY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNDQyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3QvcmVncmVzc2lvbi5jZmcKQEAgLTAsMCArMSwxNCBAQAorLy8gQm9vc3QuRnVuY3Rpb24gcmVncmVzc2lvbiB0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZQorCisvLyBGcm9tIHRoZSBib29zdC9zdGF0dXMgZGlyZWN0b3J5LCBydW4KKy8vIC4vcmVncmVzc2lvbiAtLXRlc3RzIC4uL2xpYnMvZnVuY3Rpb24vdGVzdC9yZWdyZXNzaW9uLmNmZyAtbyBmdW5jdGlvbi5odG1sCisKKworcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9hbGxvY2F0b3JfdGVzdC5jcHAKK3J1biBsaWJzL2Z1bmN0aW9uL3Rlc3QvZnVuY3Rpb25fbl90ZXN0LmNwcAorcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0LmNwcAorY29tcGlsZS1mYWlsIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwxLmNwcAorY29tcGlsZS1mYWlsIGxpYnMvZnVuY3Rpb24vdGVzdC9mdW5jdGlvbl90ZXN0X2ZhaWwyLmNwcAorcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9taXhpbl90ZXN0LmNwcAorcnVuIGxpYnMvZnVuY3Rpb24vdGVzdC9wb2xpY3lfdGVzdC5jcHAKK3J1biBsaWJzL2Z1bmN0aW9uL3Rlc3Qvc3RhdGVsZXNzX3Rlc3QuY3BwCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3RhdGVsZXNzX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L3N0YXRlbGVzc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzY3YzdkCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L3N0YXRlbGVzc190ZXN0LmNwcApAQCAtMCwwICsxLDM4IEBACisvLyBCb29zdC5GdW5jdGlvbiBsaWJyYXJ5CisKKy8vICBDb3B5cmlnaHQgRG91Z2xhcyBHcmVnb3IgMjAwMS0yMDAzLiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKKy8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgorLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZworCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9taW5pbWFsLmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorCitzdHJ1Y3Qgc3RhdGVsZXNzX2ludGVnZXJfYWRkIHsKKyAgaW50IG9wZXJhdG9yKCkoaW50IHgsIGludCB5KSBjb25zdCB7IHJldHVybiB4K3k7IH0KKworICB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpCisgIHsKKyAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIkNhbm5vdCBhbGxvY2F0ZSBhIHN0YXRlbGVzc19pbnRlZ2VyX2FkZCIpOworICB9CisKKyAgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBwKQorICB7CisgICAgcmV0dXJuIHA7CisgIH0KKworICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKQorICB7CisgIH0KK307CisKK2ludCB0ZXN0X21haW4oaW50LCBjaGFyKltdKQoreworICBuZG5ib29zdDo6ZnVuY3Rpb24yPGludCwgaW50LCBpbnQ+IGY7CisgIGYgPSBzdGF0ZWxlc3NfaW50ZWdlcl9hZGQoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9jeHg5OC5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3RkX2JpbmRfY3h4OTguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTNjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3RkX2JpbmRfY3h4OTguY3BwCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEZ1bmN0aW9uIGxpYnJhcnkKKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRG91Z2xhcyBHcmVnb3IKKworLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKy8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy8KKworICAgIAorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorCitzdHJ1Y3QgWCB7CisgIGludCBmb28oaW50KTsKK307CitpbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQorCitpbnQgbWFpbigpCit7CisgICAgICBuZG5ib29zdDo6ZnVuY3Rpb248aW50IChpbnQpPiBmOworICBYIHg7CisgIGYgPSBzdGQ6OmJpbmQxc3QoCisgICAgICAgIHN0ZDo6bWVtX2Z1bigmWDo6Zm9vKSwgJngpOworICBmKDUpOyAvLyBDYWxsIHguZm9vKDUpCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9zdGRfYmluZF9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3RkX2JpbmRfcG9ydGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhY2E3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3RkX2JpbmRfcG9ydGFibGUuY3BwCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEZ1bmN0aW9uIGxpYnJhcnkKKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRG91Z2xhcyBHcmVnb3IKKworLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKy8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy8KKworICAgIAorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorCitzdHJ1Y3QgWCB7CisgIGludCBmb28oaW50KTsKK307CitpbnQgWDo6Zm9vKGludCB4KSB7IHJldHVybiAteDsgfQorCitpbnQgbWFpbigpCit7CisgICAgICBuZG5ib29zdDo6ZnVuY3Rpb24xPGludCwgaW50PiBmOworICBYIHg7CisgIGYgPSBzdGQ6OmJpbmQxc3QoCisgICAgICAgIHN0ZDo6bWVtX2Z1bigmWDo6Zm9vKSwgJngpOworICBmKDUpOyAvLyBDYWxsIHguZm9vKDUpCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb24vdGVzdC9zdW1fYXZnX2N4eDk4LmNwcCBiL2xpYnMvZnVuY3Rpb24vdGVzdC9zdW1fYXZnX2N4eDk4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDlkNGVhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbi90ZXN0L3N1bV9hdmdfY3h4OTguY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8vIEZ1bmN0aW9uIGxpYnJhcnkKKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRG91Z2xhcyBHcmVnb3IKKworLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKy8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAKKworLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy8KKworICAgIAorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKwordm9pZCBkb19zdW1fYXZnKGludCB2YWx1ZXNbXSwgaW50IG4sIGludCYgc3VtLCBmbG9hdCYgYXZnKQoreworICBzdW0gPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICBzdW0gKz0gdmFsdWVzW2ldOworICBhdmcgPSAoZmxvYXQpc3VtIC8gbjsKK30KK2ludCBtYWluKCkKK3sKKyAgICBuZG5ib29zdDo6ZnVuY3Rpb248dm9pZCAoaW50IHZhbHVlc1tdLCBpbnQgbiwgaW50JiBzdW0sIGZsb2F0JiBhdmcpPiBzdW1fYXZnOworICAgIHN1bV9hdmcgPSAmZG9fc3VtX2F2ZzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbi90ZXN0L3N1bV9hdmdfcG9ydGFibGUuY3BwIGIvbGlicy9mdW5jdGlvbi90ZXN0L3N1bV9hdmdfcG9ydGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGU4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uL3Rlc3Qvc3VtX2F2Z19wb3J0YWJsZS5jcHAKQEAgLTAsMCArMSwyOCBAQAorLy8gRnVuY3Rpb24gbGlicmFyeQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEb3VnbGFzIEdyZWdvcgorCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIAorCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnLworCisgICAgCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCit2b2lkIGRvX3N1bV9hdmcoaW50IHZhbHVlc1tdLCBpbnQgbiwgaW50JiBzdW0sIGZsb2F0JiBhdmcpCit7CisgIHN1bSA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgIHN1bSArPSB2YWx1ZXNbaV07CisgIGF2ZyA9IChmbG9hdClzdW0gLyBuOworfQoraW50IG1haW4oKQoreworICAgIG5kbmJvb3N0OjpmdW5jdGlvbjQ8dm9pZCwgaW50KiwgaW50LCBpbnQmLCBmbG9hdCY+IHN1bV9hdmc7CisgICAgc3VtX2F2ZyA9ICZkb19zdW1fYXZnOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvYmluZGVycy5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2JpbmRlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGMyYzRiCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2JpbmRlcnMuaHRtbApAQCAtMCwwICsxLDE2MSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuLXVzIj4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiPgorCisgIDx0aXRsZT5Cb29zdCBGdW5jdGlvbiBPYmplY3QgQWRhcHRlciBMaWJyYXJ5PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+CisgIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiMwMDdGN0YiIGNlbGxwYWRkaW5nPSIyIiBzdW1tYXJ5PSIiPgorICAgIDx0cj4KKyAgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9CisgICAgICAiYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+SG9tZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uL2xpYnJhcmllcy5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkxpYnJhcmllczwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9wZW9wbGUuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5QZW9wbGU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9tb3JlL2ZhcS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkZBUTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL21vcmUvaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Nb3JlPC9iaWc+PC9mb250PjwvYT48L3RkPgorICAgIDwvdHI+CisgIDwvdGFibGU+CisKKyAgPGgxPkJpbmRlcnM8L2gxPgorCisgIDxwPlRoZSBoZWFkZXIgPGEgaHJlZj0iLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC5ocHAiPmZ1bmN0aW9uYWwuaHBwPC9hPgorICBwcm92aWRlcyBlbmhhbmNlZCB2ZXJzaW9ucyBvZiBib3RoIHRoZSBiaW5kZXIgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzIGZyb20KKyAgdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5ICgmc2VjdDsyMC4zLjYpOjwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD5iaW5kZXIxc3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PmJpbmRlcjJuZDwvdHQ+PC9saT4KKyAgPC91bD4KKworICA8cD5BcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIGhlbHBlciBmdW5jdGlvbnM8L3A+CisKKyAgPHVsPgorICAgIDxsaT48dHQ+YmluZDFzdDwvdHQ+PC9saT4KKworICAgIDxsaT48dHQ+YmluZDJuZDwvdHQ+PC9saT4KKyAgPC91bD4KKworICA8cD5UaGUga2V5IGJlbmVmaXQgb2YgdGhlc2UgYWRhcHRlcnMgb3ZlciB0aG9zZSBpbiB0aGUgU3RhbmRhcmQgTGlicmFyeSBpcworICB0aGV5IGF2b2lkIHRoZSBwcm9ibGVtIG9mIDxhIGhyZWY9IiNyZWZyZWYiPnJlZmVyZW5jZXMgdG8KKyAgcmVmZXJlbmNlcy48L2E+PC9wPgorCisgIDxoMz5Vc2FnZTwvaDM+CisKKyAgPHA+VXNhZ2UgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdGFuZGFyZCBiaW5kZXJzLiBGb3IgZXhhbXBsZSw8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2NsYXNzIEZvbyB7CitwdWJsaWM6CisgIHZvaWQgYmFyKHN0ZDo6b3N0cmVhbSAmYW1wOyk7CisgIC8vIC4uLgorfTsKKy8vIC4uLgorc3RkOjp2ZWN0b3ImbHQ7Rm9vJmd0OyBjOworLy8gLi4uCitzdGQ6OmZvcl9lYWNoKGMuYmVnaW4oKSwgYy5lbmQoKSwgCisgICAgICAgICAgICAgIGJvb3N0OjpiaW5kMm5kKGJvb3N0OjptZW1fZnVuX3JlZigmYW1wO0Zvbzo6YmFyKSwgc3RkOjpjb3V0KSk7Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxoMyBpZD0icmVmcmVmIj5SZWZlcmVuY2VzIHRvIFJlZmVyZW5jZXM8L2gzPgorCisgIDxwPkNvbnNpZGVyIHRoZSB1c2FnZSBleGFtcGxlIGFib3ZlPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+CitjbGFzcyBGb28geworcHVibGljOgorICB2b2lkIGJhcig8c3Ryb25nPnN0ZDo6b3N0cmVhbSAmYW1wOzwvc3Ryb25nPik7CisgIC8vIC4uLgorfTsKKy8vIC4uLgorc3RkOjpmb3JfZWFjaChjLmJlZ2luKCksIGMuZW5kKCksIAorICAgICAgICAgICAgICBib29zdDo6YmluZDJuZChib29zdDo6bWVtX2Z1bl9yZWYoJmFtcDtGb286OmJhciksIHN0ZDo6Y291dCkpOworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5JZiB0aGlzIGhhZCBiZWVuIHdyaXR0ZW4gdXNpbmcgPHR0PnN0ZDo6YmluZDJuZDwvdHQ+IGFuZAorICA8dHQ+c3RkOjptZW1fZnVuX3JlZjwvdHQ+LCBpdCB3b3VsZCBiZSB1bmxpa2VseSB0byBjb21waWxlLjwvcD4KKworICA8cD5UaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSA8dHQ+YmFyPC90dD4gdGFrZXMgYSByZWZlcmVuY2UgYXJndW1lbnQuIFRoZQorICBTdGFuZGFyZCBkZWZpbmVzIDx0dD5zdGQ6Om1lbV9mdW5fcmVmPC90dD4gc3VjaCB0aGF0IGl0IGNyZWF0ZXMgYSBmdW5jdGlvbgorICBvYmplY3Qgd2hvc2UgPHR0PnNlY29uZF9hcmd1bWVudF90eXBlPC90dD4gd2lsbCBiZQorICA8dHQ+c3RkOjpvc3RyZWFtJmFtcDs8L3R0Pi48L3A+CisKKyAgPHA+VGhlIGNhbGwgdG8gPHR0PmJpbmQybmQ8L3R0PiBjcmVhdGVzIGEgPHR0PmJpbmRlcjJuZDwvdHQ+IHdoaWNoIHRoZQorICBTdGFuZGFyZCBkZWZpbmVzIGFzIGZvbGxvd3M6PC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0ZW1wbGF0ZSAmbHQ7Y2xhc3MgT3BlcmF0aW9uJmd0OworY2xhc3MgYmluZGVyMm5kCisgICAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb24mbHQ7dHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGUmZ3Q7IHsKKy4uLgorcHVibGljOgorICBiaW5kZXIybmQoY29uc3QgT3BlcmF0aW9uJmFtcDsgeCwKKyAgICAgICAgICAgIDxzdHJvbmc+Y29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHk8L3N0cm9uZz4pOworICAuLi4KKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+U2luY2Ugb3VyIG9wZXJhdGlvbidzIDx0dD5zZWNvbmRfYXJndW1lbnRfdHlwZTwvdHQ+IGlzCisgIDx0dD5zdGQ6Om9zdHJlYW0mYW1wOzwvdHQ+LCB0aGUgdHlwZSBvZiA8dHQ+eTwvdHQ+IGluIHRoZSBjb25zdHJ1Y3RvciB3b3VsZAorICBiZSA8dHQ+c3RkOjpvc3RyZWFtJmFtcDsmYW1wOzwvdHQ+LiBTaW5jZSB5b3UgY2Fubm90IGhhdmUgYSByZWZlcmVuY2UgdG8gYQorICByZWZlcmVuY2UsIGF0IHRoaXMgcG9pbnQgd2Ugc2hvdWxkIGdldCBhIGNvbXBpbGF0aW9uIGVycm9yIGJlY2F1c2UKKyAgcmVmZXJlbmNlcyB0byByZWZlcmVuY2VzIGFyZSBpbGxlZ2FsIGluIEMrKyAoYnV0IHNlZSA8YSBocmVmPQorICAiaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMxMDYiPkMrKworICBTdGFuZGFyZCBjb3JlIGxhbmd1YWdlIGFjdGl2ZSBpc3N1ZXMgbGlzdDwvYT4pLjwvcD4KKworICA8cD5UaGUgYmluZGVycyBpbiB0aGlzIGxpYnJhcnkgYXZvaWQgdGhpcyBwcm9ibGVtIGJ5IHVzaW5nIHRoZSBCb29zdAorICA8dHQ+PGEgaHJlZj0iLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGxfdHJhaXRzPC9hPjwvdHQ+CisgIHRlbXBsYXRlcy48L3A+CisKKyAgPHA+T3VyIGNvbnN0cnVjdG9yIGlzIGRlY2xhcmVkPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+CitiaW5kZXIybmQoY29uc3QgT3BlcmF0aW9uJmFtcDsgeCwKKyAgICAgICAgICA8c3Ryb25nPnR5cGVuYW1lIGNhbGxfdHJhaXRzJmx0OworICAgICAgICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHMmbHQ7T3BlcmF0aW9uJmd0Ozo6c2Vjb25kX2FyZ3VtZW50X3R5cGUKKyAgICAgICAgICAmZ3Q7OjpwYXJhbV90eXBlIHk8L3N0cm9uZz4pCis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPkFzIGEgcmVzdWx0LCA8dHQ+eTwvdHQ+IGhhcyBhIHR5cGUgb2YgPHR0PnN0ZDo6b3N0cmVhbSZhbXA7PC90dD4sIGFuZAorICBvdXIgZXhhbXBsZSBjb21waWxlcy48L3A+CisgIDxocj4KKworICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KKyAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKKyAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgorCisgIDxwPlJldmlzZWQgCisgIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKKyAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+CisKKyAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+CisKKyAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgorICBjb3B5IGF0IDxhIGhyZWY9CisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9KYW1maWxlIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1MzMzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9KYW1maWxlCkBAIC0wLDAgKzEsMjAgQEAKKworIyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKKyMKKyMgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAorIyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi9cL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKwordXNpbmcgcXVpY2tib29rIDsKKworeG1sIGZhY3RvcnkgOiBmYWN0b3J5LnFiayA7Citib29zdGJvb2sgc3RhbmRhbG9uZSA6IGZhY3RvcnkKKyAgOgorICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LnJvb3Q9Li4vLi4vLi4vLi4vLi4KKyAgICAgICAgPHhzbDpwYXJhbT5ib29zdC5saWJyYXJpZXM9Li4vLi4vLi4vLi4vbGlicmFyaWVzLmh0bQorICAgICAgICA8eHNsOnBhcmFtPmNodW5rLnNlY3Rpb24uZGVwdGg9MAorICAgICAgICA8eHNsOnBhcmFtPmNodW5rLmZpcnN0LnNlY3Rpb25zPTAKKyAgICAgICAgPHhzbDpwYXJhbT5nZW5lcmF0ZS5zZWN0aW9uLnRvYy5sZXZlbD0yCisgICAgICAgIDx4c2w6cGFyYW0+dG9jLm1heC5kZXB0aD0xCisgIDsKKworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvZmFjdG9yeS5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvZmFjdG9yeS5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhM2ZhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9mYWN0b3J5LnFiawpAQCAtMCwwICsxLDM4NiBAQAorW2xpYnJhcnkgQm9vc3QuRnVuY3Rpb25hbC9GYWN0b3J5CisgIFtxdWlja2Jvb2sgMS4zXQorICBbdmVyc2lvbiAxLjBdCisgIFthdXRob3JzIFtTY2h3aW5nZXIsIFRvYmlhc11dCisgIFtjb3B5cmlnaHQgMjAwNyAyMDA4IFRvYmlhcyBTY2h3aW5nZXJdCisgIFtsaWNlbnNlCisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKyAgICAgICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKKyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHRdKQorICBdCisgIFtwdXJwb3NlIEZ1bmN0aW9uIG9iamVjdCB0ZW1wbGF0ZXMgZm9yIG9iamVjdCBjcmVhdGlvbi5dCisgIFtjYXRlZ29yeSBoaWdoZXItb3JkZXJdCisgIFtjYXRlZ29yeSBnZW5lcmljXQorICBbbGFzdC1yZXZpc2lvbiAkRGF0ZTogMjAwOC8xMS8wMSAyMTo0NDo1MiAkXQorXQorCitbZGVmIF9fYm9vc3RfYmluZF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCBCb29zdC5CaW5kXV0KK1tkZWYgX19ib29zdF9fYmluZF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCBgYm9vc3Q6OmJpbmRgXV0KKworW2RlZiBfX2Jvb3N0X19mb3J3YXJkX2FkYXB0ZXJfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9pbmRleC5odG1sIGBib29zdDo6Zm9yd2FyZF9hZGFwdGVyYF1dCitbZGVmIF9fZnVzaW9uX2Z1bmN0aW9uYWxfYWRhcHRlcnNfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVzaW9uL2RvYy9odG1sL2Z1bmN0aW9uYWwuaHRtbCBGdXNpb24gRnVuY3Rpb25hbCBBZGFwdGVyc11dCisKK1tkZWYgX19ib29zdF9mdW5jdGlvbl9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvZnVuY3Rpb24uaHRtbCBCb29zdC5GdW5jdGlvbl1dCitbZGVmIF9fYm9vc3RfX2Z1bmN0aW9uX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIGBib29zdDo6ZnVuY3Rpb25gXV0KKworW2RlZiBfX3NtYXJ0X3BvaW50ZXJfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL2luZGV4Lmh0bWwgU21hcnQgUG9pbnRlcl1dCitbZGVmIF9fc21hcnRfcG9pbnRlcnNfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL2luZGV4Lmh0bWwgU21hcnQgUG9pbnRlcnNdXQorW2RlZiBfX2Jvb3N0X19zaGFyZWRfcHRyX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3NtYXJ0X3B0ci9zaGFyZWRfcHRyLmh0bSBgYm9vc3Q6OnNoYXJlZF9wdHJgXV0KKworW2RlZiBfX3N0ZF9fbWFwX18gW0BodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvbWFwLmh0bWwgYHN0ZDo6bWFwYF1dCitbZGVmIF9fc3RkX19zdHJpbmdfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9zdHJpbmcuaHRtbCBgc3RkOjpzdHJpbmdgXV0KK1tkZWYgX19hbGxvY2F0b3JfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCBBbGxvY2F0b3JdXQorW2RlZiBfX3N0ZF9hbGxvY2F0b3JfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCBBbGxvY2F0b3JdXQorW2RlZiBfX3N0ZF9hbGxvY2F0b3JzX18gW0BodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvY29uY2VwdHMvYWxsb2NhdG9yLmh0bWwgQWxsb2NhdG9yc11dCisKK1tkZWYgX19ib29zdF9fcHRyX21hcF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9wdHJfY29udGFpbmVyL2RvYy9wdHJfbWFwLmh0bWwgYGJvb3N0OjpwdHJfbWFwYF1dCisKK1tkZWYgX19ib29zdF9fZmFjdG9yeV9fIGBib29zdDo6ZmFjdG9yeWBdCitbZGVmIF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXyBgYm9vc3Q6OnZhbHVlX2ZhY3RvcnlgXQorCitbZGVmIF9fZmFjdG9yeV9fIGBmYWN0b3J5YF0KK1tkZWYgX192YWx1ZV9mYWN0b3J5X18gYHZhbHVlX2ZhY3RvcnlgXQorCisKK1tzZWN0aW9uIEJyaWVmIERlc2NyaXB0aW9uXQorCitUaGUgdGVtcGxhdGUgX19ib29zdF9fZmFjdG9yeV9fIGxldHMgeW91IGVuY2Fwc3VsYXRlIGEgYG5ld2AgZXhwcmVzc2lvbgorYXMgYSBmdW5jdGlvbiBvYmplY3QsIF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXyBlbmNhcHN1bGF0ZXMgYSBjb25zdHJ1Y3RvcgoraW52b2NhdGlvbiB3aXRob3V0IGBuZXdgLgorCisgICAgX19ib29zdF9fZmFjdG9yeV9fPFQqPigpKGFyZzEsYXJnMixhcmczKSAKKyAgICAvLyBzYW1lIGFzIG5ldyBUKGFyZzEsYXJnMixhcmczKQorCisgICAgX19ib29zdF9fdmFsdWVfZmFjdG9yeV9fPFQ+KCkoYXJnMSxhcmcyLGFyZzMpCisgICAgLy8gc2FtZSBhcyBUKGFyZzEsYXJnMixhcmczKQorCitGb3IgdGVjaG5pY2FsIHJlYXNvbnMgdGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24gb2JqZWN0cyBoYXZlIHRvIGJlCitMVmFsdWVzLiBBIGZhY3RvcnkgdGhhdCBhbHNvIGFjY2VwdHMgUlZhbHVlcyBjYW4gYmUgY29tcG9zZWQgdXNpbmcgdGhlCitfX2Jvb3N0X19mb3J3YXJkX2FkYXB0ZXJfXyBvciBfX2Jvb3N0X19iaW5kX18uCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbiBCYWNrZ3JvdW5kXQorCitJbiB0cmFkaXRpb25hbCBPYmplY3QgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgYSBGYWN0b3J5IGlzIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcKK2FuIGludGVyZmFjZSBvZiBvbmUgb3IgbW9yZSBtZXRob2RzIHRoYXQgY29uc3RydWN0IG9iamVjdHMgY29uZm9ybWluZyB0byBrbm93bgoraW50ZXJmYWNlcy4KKworICAgIC8vIGFzc3VtaW5nIGFfY29uY3JldGVfY2xhc3MgYW5kIGFub3RoZXJfY29uY3JldGVfY2xhc3MgYXJlIGRlcml2ZWQKKyAgICAvLyBmcm9tIGFuX2Fic3RyYWN0X2NsYXNzCisKKyAgICBjbGFzcyBhX2ZhY3RvcnkKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYW5fYWJzdHJhY3RfY2xhc3MqIGNyZWF0ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB+YV9mYWN0b3J5KCkgeyB9CisgICAgfTsKKworICAgIGNsYXNzIGFfY29uY3JldGVfZmFjdG9yeSA6IHB1YmxpYyBhX2ZhY3RvcnkKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYW5fYWJzdHJhY3RfY2xhc3MqIGNyZWF0ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgYV9jb25jcmV0ZV9jbGFzcygpOworICAgICAgICB9CisgICAgfTsKKworICAgIGNsYXNzIGFub3RoZXJfY29uY3JldGVfZmFjdG9yeSA6IHB1YmxpYyBhX2ZhY3RvcnkKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYW5fYWJzdHJhY3RfY2xhc3MqIGNyZWF0ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgYW5vdGhlcl9jb25jcmV0ZV9jbGFzcygpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFsuLi5dCisKKyAgICBpbnQgbWFpbigpCisgICAgeworICAgICAgICBfX2Jvb3N0X19wdHJfbWFwX188X19zdGRfX3N0cmluZ19fLGFfZmFjdG9yeT4gZmFjdG9yaWVzOworCisgICAgICAgIC8vIFsuLi5dCisKKyAgICAgICAgZmFjdG9yaWVzLmluc2VydCgiYV9uYW1lIixzdGQ6OmF1dG9fcHRyPGFfZmFjdG9yeT4oCisgICAgICAgICAgICBuZXcgYV9jb25jcmV0ZV9mYWN0b3J5KSk7CisgICAgICAgIGZhY3Rvcmllcy5pbnNlcnQoImFub3RoZXJfbmFtZSIsc3RkOjphdXRvX3B0cjxhX2ZhY3Rvcnk+KAorICAgICAgICAgICAgbmV3IGFub3RoZXJfY29uY3JldGVfZmFjdG9yeSkpOworCisgICAgICAgIC8vIFsuLi5dCisKKyAgICAgICAgc3RkOjphdXRvX3B0cjxhbl9hYnN0cmFjdF9jbGFzcz4geChmYWN0b3JpZXMuYXQoc29tZV9uYW1lKS5jcmVhdGUoKSk7CisKKyAgICAgICAgLy8gWy4uLl0KKyAgICB9CisKK1RoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwgZHJhd2JhY2tzLiBUaGUgbW9zdCBvYnZpb3VzIG9uZSBpcyB0aGF0IHRoZXJlIGlzCitsb3RzIG9mIGJvaWxlcnBsYXRlIGNvZGUuIEluIG90aGVyIHdvcmRzIHRoZXJlIGlzIHRvbyBtdWNoIGNvZGUgdG8gZXhwcmVzcworYSByYXRoZXIgc2ltcGxlIGludGVudGlvbi4gV2UgY291bGQgdXNlIHRlbXBsYXRlcyB0byBnZXQgcmlkIG9mIHNvbWUgb2YgaXQKK2J1dCB0aGUgYXBwcm9hY2ggcmVtYWlucyBpbmZsZXhpYmxlOiAKKworKiBXZSBtYXkgd2FudCBhIGZhY3RvcnkgdGhhdCB0YWtlcyBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8KKyAgdGhlIGNvbnN0cnVjdG9yLAorKiB3ZSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIHNtYXJ0IHBvaW50ZXJzLAorKiB3ZSBtYXkgd2FudCBzZXZlcmFsIG1lbWJlciBmdW5jdGlvbnMgdG8gY3JlYXRlIGRpZmZlcmVudCBraW5kcyBvZgorICBvYmplY3RzLAorKiB3ZSBtaWdodCBub3QgbmVjZXNzYXJpbHkgbmVlZCBhIHBvbHltb3JwaGljIGJhc2UgY2xhc3MgZm9yIHRoZSBvYmplY3RzLAorKiBhcyB3ZSB3aWxsIHNlZSwgd2UgZG8gbm90IG5lZWQgYSBmYWN0b3J5IGJhc2UgY2xhc3MgYXQgYWxsLCAKKyogd2UgbWlnaHQgd2FudCB0byBqdXN0IGNhbGwgdGhlIGNvbnN0cnVjdG9yIC0gd2l0aG91dCBgbmV3YCB0byBjcmVhdGUKKyAgYW4gb2JqZWN0IG9uIHRoZSBzdGFjaywgYW5kCisqIGZpbmFsbHkgd2UgbWlnaHQgd2FudCB0byB1c2UgY3VzdG9taXplZCBtZW1vcnkgbWFuYWdlbWVudC4KKworRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCB1c2luZyBmdW5jdGlvbiBvYmplY3RzIGFuZCBnZW5lcmljIEJvb3N0IGNvbXBvbmVudHMKK2ZvciB0aGVpciBjb21wb3NpdGlvbiwgRGVzaWduIFBhdHRlcm5zIHRoYXQgZGVzY3JpYmUgY2FsbGJhY2sgbWVjaGFuaXNtcworKHR5cGljYWxseSByZXF1aXJpbmcgYSBoaWdoIHBlcmNlbnRhZ2Ugb2YgYm9pbGVycGxhdGUgY29kZSB3aXRoIHB1cmUgT2JqZWN0CitPcmllbnRlZCBtZXRob2RvbG9neSkgYmVjb21lIGltcGxlbWVudGFibGUgd2l0aCBqdXN0IGZldyBjb2RlIGxpbmVzIGFuZCB3aXRob3V0CitleHRyYSBjbGFzc2VzLiAKKworRmFjdG9yaWVzIGFyZSBjYWxsYmFjayBtZWNoYW5pc21zIGZvciBjb25zdHJ1Y3RvcnMsIHNvIHdlIHByb3ZpZGUgdHdvIGNsYXNzCit0ZW1wbGF0ZXMsIF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXyBhbmQgX19ib29zdF9fZmFjdG9yeV9fLCB0aGF0IGVuY2Fwc3VsYXRlCitvYmplY3QgY29uc3RydWN0aW9uIHZpYSBkaXJlY3QgYXBwbGljYXRpb24gb2YgdGhlIGNvbnN0cnVjdG9yIGFuZCB0aGUgYG5ld2AKK29wZXJhdG9yLCByZXNwZWN0aXZlbHkuIAorCitXZSBsZXQgdGhlIGZ1bmN0aW9uIG9iamVjdHMgZm9yd2FyZCB0aGVpciBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdGlvbgorZXhwcmVzc2lvbnMgdGhleSBlbmNhcHN1bGF0ZS4gT3ZlciB0aGlzIF9fYm9vc3RfX2ZhY3RvcnlfXyBvcHRpb25hbGx5IGFsbG93cwordGhlIHVzZSBvZiBzbWFydCBwb2ludGVycyBhbmQgX19zdGRfYWxsb2NhdG9yc19fLgorCitDb21waWxlLXRpbWUgcG9seW1vcnBoaXNtIGNhbiBiZSB1c2VkIHdoZXJlIGFwcHJvcHJpYXRlLAorCisgICAgdGVtcGxhdGU8IGNsYXNzIFQgPgorICAgIHZvaWQgZG9fc29tZXRoaW5nKCkKKyAgICB7CisgICAgICAgIC8vIFsuLi5dCisgICAgICAgIFQgeCA9IFQoYSxiKTsKKworICAgICAgICAvLyBmb3IgY29uY2VwdHVhbGx5IHNpbWlsYXIgb2JqZWN0cyB4IHdlIG5laXRoZXIgbmVlZCB2aXJ0dWFsCisgICAgICAgIC8vIGZ1bmN0aW9ucyBub3IgYSBjb21tb24gYmFzZSBjbGFzcyBpbiB0aGlzIGNvbnRleHQuCisgICAgICAgIC8vIFsuLi5dCisgICAgfQorCitOb3csIHRvIGFsbG93IGluaG9tb2dlbmVvdXMgc2lnbmF0dXJlcyBmb3IgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdHlwZXMgcGFzc2VkCitpbiBmb3IgYFRgIHdlIGNhbiB1c2UgX192YWx1ZV9mYWN0b3J5X18gYW5kIF9fYm9vc3RfX2JpbmRfXyB0byBub3JtYWxpemUgYmV0d2VlbgordGhlbS4gCisKKyAgICB0ZW1wbGF0ZTwgY2xhc3MgVmFsdWVGYWN0b3J5ID4gCisgICAgdm9pZCBkb19zb21ldGhpbmcoVmFsdWVGYWN0b3J5IG1ha2Vfb2JqID0gVmFsdWVGYWN0b3J5KCkpCisgICAgeworICAgICAgICAvLyBbLi4uXQorICAgICAgICB0eXBlbmFtZSBWYWx1ZUZhY3Rvcnk6OnJlc3VsdF90eXBlIHggPSBtYWtlX29iaihhLGIpOworCisgICAgICAgIC8vIGZvciBjb25jZXB0dWFsbHkgc2ltaWxhciBvYmplY3RzIHggd2UgbmVpdGhlciBuZWVkIHZpcnR1YWwKKyAgICAgICAgLy8gZnVuY3Rpb25zIG5vciBhIGNvbW1vbiBiYXNlIGNsYXNzIGluIHRoaXMgY29udGV4dC4KKyAgICAgICAgLy8gWy4uLl0KKyAgICB9CisKKyAgICBpbnQgbWFpbigpCisgICAgeworICAgICAgICAvLyBbLi4uXQorCisgICAgICAgIGRvX3NvbWV0aGluZyhfX2Jvb3N0X192YWx1ZV9mYWN0b3J5X188WD4oKSk7CisgICAgICAgIGRvX3NvbWV0aGluZyhib29zdDo6YmluZChfX2Jvb3N0X192YWx1ZV9mYWN0b3J5X188WT4oKSxfMSw1LF8yKSk7CisgICAgICAgIC8vIGNvbnN0cnVjdCBYKGEsYikgYW5kIFkoYSw1LGIpLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgLy8gWy4uLl0KKyAgICB9CisKK01heWJlIHdlIHdhbnQgb3VyIG9iamVjdHMgdG8gb3V0bGl2ZSB0aGUgZnVuY3Rpb24ncyBzY29wZSwgaW4gdGhpcyBjYXNlIHdlCitoYXZlIHRvIHVzZSBkeW5hbWljIGFsbG9jYXRpb247CisKKyAgICB0ZW1wbGF0ZTwgY2xhc3MgRmFjdG9yeSA+CisgICAgd2hhdGV2ZXIgZG9fc29tZXRoaW5nKEZhY3RvcnkgbmV3X29iaiA9IEZhY3RvcnkoKSkKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEZhY3Rvcnk6OnJlc3VsdF90eXBlIHB0ciA9IG5ld19vYmooYSxiKTsKKworICAgICAgICAvLyBhZ2Fpbiwgbm8gY29tbW9uIGJhc2UgY2xhc3Mgb3IgdmlydHVhbCBmdW5jdGlvbnMgbmVlZGVkLAorICAgICAgICAvLyB3ZSBjb3VsZCBlbmZvcmNlIGEgcG9seW1vcnBoaWMgYmFzZSBieSB3cml0aW5nIGUuZy4KKyAgICAgICAgLy8gICAgYm9vc3Q6OnNoYXJlZF9wdHI8YmFzZT4KKyAgICAgICAgLy8gaW5zdGVhZCBvZgorICAgICAgICAvLyAgICB0eXBlbmFtZSBGYWN0b3J5OjpyZXN1bHRfdHlwZQorICAgICAgICAvLyBhYm92ZS4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGFyZSBhbHNvIGZyZWUgdG8gaGF2ZSB0aGUgdHlwZSBlcmFzdXJlIGhhcHBlbiAKKyAgICAgICAgLy8gc29tZXdoZXJlIGVsc2UgKGUuZy4gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgZnVuY3Rpb24ncworICAgICAgICAvLyByZXN1bHQgdHlwZSkuCisKKyAgICAgICAgLy8gWy4uLl0KKyAgICB9CisKKyAgICAvLyBbLi4uIGNhbGwgZG9fc29tZXRoaW5nIGxpa2UgYWJvdmUgYnV0IHdpdGggX19mYWN0b3J5X18gaW5zdGVhZAorICAgIC8vIG9mIF9fdmFsdWVfZmFjdG9yeV9fXQorCitBbHRob3VnaCB3ZSBtaWdodCBoYXZlIGNyZWF0ZWQgcG9seW1vcnBoaWMgb2JqZWN0cyBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwKK3dlIGhhdmUgdXNlZCBjb21waWxlIHRpbWUgcG9seW1vcnBoaXNtIGZvciB0aGUgZmFjdG9yeS4gSWYgd2Ugd2FudCB0byBlcmFzZQordGhlIHR5cGUgb2YgdGhlIGZhY3RvcnkgYW5kIHRodXMgYWxsb3cgcG9seW1vcnBoaXNtIGF0IHJ1biB0aW1lLCB3ZSBjYW4KK3VzZSBfX2Jvb3N0X2Z1bmN0aW9uX18gdG8gZG8gc28uIFRoZSBmaXJzdCBleGFtcGxlIGNhbiBiZSByZXdyaXR0ZW4gYXMgCitmb2xsb3dzLgorCisgICAgdHlwZWRlZiBib29zdDo6ZnVuY3Rpb248IGFuX2Fic3RyYWN0X2NsYXNzKigpID4gYV9mYWN0b3J5OworCisgICAgLy8gWy4uLl0KKworICAgIGludCBtYWluKCkKKyAgICB7CisgICAgICAgIF9fc3RkX19tYXBfXzxfX3N0ZF9fc3RyaW5nX18sYV9mYWN0b3J5PiBmYWN0b3JpZXM7CisKKyAgICAgICAgLy8gWy4uLl0KKworICAgICAgICBmYWN0b3JpZXNbImFfbmFtZSJdID0gX19ib29zdF9fZmFjdG9yeV9fPGFfY29uY3JldGVfY2xhc3MqPigpOworICAgICAgICBmYWN0b3JpZXNbImFub3RoZXJfbmFtZSJdID0gCisgICAgICAgICAgICBfX2Jvb3N0X19mYWN0b3J5X188YW5vdGhlcl9jb25jcmV0ZV9jbGFzcyo+KCk7CisKKyAgICAgICAgLy8gWy4uLl0KKyAgICB9IAorCitPZiBjb3Vyc2Ugd2UgY2FuIGp1c3QgYXMgZWFzeSBjcmVhdGUgZmFjdG9yaWVzIHRoYXQgdGFrZSBhcmd1bWVudHMgYW5kL29yCityZXR1cm4gX19zbWFydF9wb2ludGVyc19fLgorCitbZW5kc2VjdF0KKworCitbc2VjdGlvbjpyZWZlcmVuY2UgUmVmZXJlbmNlXQorCisKK1tzZWN0aW9uIHZhbHVlX2ZhY3RvcnldCisKK1toZWFkaW5nIERlc2NyaXB0aW9uXQorCitGdW5jdGlvbiBvYmplY3QgdGVtcGxhdGUgdGhhdCBpbnZva2VzIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdHlwZSBgVGAuCisKK1toZWFkaW5nIEhlYWRlcl0KKyAgICAjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC92YWx1ZV9mYWN0b3J5LmhwcD4KKworW2hlYWRpbmcgU3lub3BzaXNdCisKKyAgICBuYW1lc3BhY2UgYm9vc3QKKyAgICB7CisgICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4KKyAgICAgICAgY2xhc3MgdmFsdWVfZmFjdG9yeTsKKyAgICB9CisKK1t2YXJpYWJsZWxpc3QgTm90YXRpb24KKyAgICBbW2BUYF0gICAgICAgICBbYW4gYXJiaXRyYXJ5IHR5cGUgd2l0aCBhdCBsZWFzdCBvbmUgcHVibGljIGNvbnN0cnVjdG9yXV0KKyAgICBbW2BhMGAuLi5gYU5gXSBbYXJndW1lbnQgTFZhbHVlcyB0byBhIGNvbnN0cnVjdG9yIG9mIGBUYF1dCisgICAgW1tgRmBdICAgICAgICAgW3RoZSB0eXBlIGB2YWx1ZV9mYWN0b3J5PEY+YF1dCisgICAgW1tgZmBdICAgICAgICAgW2FuIGluc3RhbmNlIG9iamVjdCBvZiBgRmBdXQorXQorCitbaGVhZGluZyBFeHByZXNzaW9uIFNlbWFudGljc10KKworW3RhYmxlCisgICAgW1tFeHByZXNzaW9uXSAgICAgICBbU2VtYW50aWNzXV0KKyAgICBbW2BGKClgXSAgICAgICAgICAgIFtjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIGBGYC5dXQorICAgIFtbYEYoZilgXSAgICAgICAgICAgW2NyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgYEZgLl1dCisgICAgW1tgZihhMGAuLi5gYU4pYF0gICBbcmV0dXJucyBgVChhMGAuLi5gYU4pYC5dXQorICAgIFtbYEY6OnJlc3VsdF90eXBlYF0gW2lzIHRoZSB0eXBlIGBUYC5dXQorXQorCitbaGVhZGluZyBMaW1pdHNdCisKK1RoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX1ZBTFVFX0ZBQ1RPUllfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldCB0aGUKK21heGltdW0gYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDEwLgorCitbZW5kc2VjdF0KKworCitbc2VjdGlvbiBmYWN0b3J5XQorCitbaGVhZGluZyBEZXNjcmlwdGlvbl0KKworRnVuY3Rpb24gb2JqZWN0IHRlbXBsYXRlIHRoYXQgZHluYW1pY2FsbHkgY29uc3RydWN0cyBhIHBvaW50ZWUgb2JqZWN0IGZvcgordGhlIHR5cGUgb2YgcG9pbnRlciBnaXZlbiBhcyB0ZW1wbGF0ZSBhcmd1bWVudC4gU21hcnQgcG9pbnRlcnMgbWF5IGJlIHVzZWQKK2ZvciB0aGUgdGVtcGxhdGUgYXJndW1lbnQsIGdpdmVuIHRoYXQgYGJvb3N0Ojpwb2ludGVlPFBvaW50ZXI+Ojp0eXBlYCB5aWVsZHMKK3RoZSBwb2ludGVlIHR5cGUuCisKK0lmIGFuIF9fYWxsb2NhdG9yX18gaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgCitwbGFjZW1lbnQgZm9ybSBvZiB0aGUgYG5ld2Agb3BlcmF0b3IgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIG9iamVjdC4KK0EgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FsbHMgdGhlIGRlc3RydWN0b3IgYW5kIGRlYWxsb2NhdGVzIHRoZSBtZW1vcnkKK3dpdGggYSBjb3B5IG9mIHRoZSBBbGxvY2F0b3IgaXMgdXNlZCBmb3IgdGhlIHNlY29uZCBjb25zdHJ1Y3RvciBhcmd1bWVudAorb2YgYFBvaW50ZXJgICh0aHVzIGl0IG11c3QgYmUgYSBfX3NtYXJ0X3BvaW50ZXJfXyB0aGF0IHByb3ZpZGVzIGEgc3VpdGFibGUgCitjb25zdHJ1Y3Rvciwgc3VjaCBhcyBfX2Jvb3N0X19zaGFyZWRfcHRyX18pLgorCitJZiBhIHRoaXJkIHRlbXBsYXRlIGFyZ3VtZW50IGlzIGBmYWN0b3J5X3Bhc3Nlc19hbGxvY190b19zbWFydF9wb2ludGVyYCwKK3RoZSBhbGxvY2F0b3IgaXRzZWxmIGlzIHVzZWQgZm9yIHRoZSB0aGlyZCBjb25zdHJ1Y3RvciBhcmd1bWVudCBvZiBgUG9pbnRlcmAKKyhfX2Jvb3N0X19zaGFyZWRfcHRyX18gdGhlbiB1c2VzIHRoZSBhbGxvY2F0b3IgdG8gbWFuYWdlIHRoZSBtZW1vcnkgb2YgaXRzCitzZXBhcmF0ZWx5IGFsbG9jYXRlZCByZWZlcmVuY2UgY291bnRlcikuCisKK1toZWFkaW5nIEhlYWRlcl0KKyAgICAjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mYWN0b3J5LmhwcD4KKworW2hlYWRpbmcgU3lub3BzaXNdCisKKyAgICBuYW1lc3BhY2UgYm9vc3QKKyAgICB7CisgICAgICAgIGVudW0gZmFjdG9yeV9hbGxvY19wcm9wYWdhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBmYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyLAorICAgICAgICAgICAgZmFjdG9yeV9wYXNzZXNfYWxsb2NfdG9fc21hcnRfcG9pbnRlcgorICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQb2ludGVyLCAKKyAgICAgICAgICAgIGNsYXNzIEFsbG9jYXRvciA9IGJvb3N0Ojpub25lX3QsCisgICAgICAgICAgICBmYWN0b3J5X2FsbG9jX3Byb3BhZ2F0aW9uIEFsbG9jUHJvcCA9CisgICAgICAgICAgICAgICAgZmFjdG9yeV9hbGxvY19mb3JfcG9pbnRlZV9hbmRfZGVsZXRlciA+CisgICAgICAgIGNsYXNzIGZhY3Rvcnk7CisgICAgfQorCitbdmFyaWFibGVsaXN0IE5vdGF0aW9uCisgICAgW1tgVGBdICAgICAgICAgW2FuIGFyYml0cmFyeSB0eXBlIHdpdGggYXQgbGVhc3Qgb25lIHB1YmxpYyBjb25zdHJ1Y3Rvcl1dCisgICAgW1tgUGBdICAgICAgICAgW3BvaW50ZXIgb3Igc21hcnQgcG9pbnRlciB0byBgVGBdXQorICAgIFtbYGEwYC4uLmBhTmBdIFthcmd1bWVudCBMVmFsdWVzIHRvIGEgY29uc3RydWN0b3Igb2YgYFRgXV0KKyAgICBbW2BGYF0gICAgICAgICBbdGhlIHR5cGUgYGZhY3Rvcnk8UD5gXV0KKyAgICBbW2BmYF0gICAgICAgICBbYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIGBGYF1dCitdCisKK1toZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQorCitbdGFibGUKKyAgICBbW0V4cHJlc3Npb25dICAgICAgIFtTZW1hbnRpY3NdXQorICAgIFtbYEYoKWBdICAgICAgICAgICAgW2NyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgYEZgLl1dCisgICAgW1tgRihmKWBdICAgICAgICAgICBbY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSBgRmAuXV0KKyAgICBbW2BmKGEwYC4uLmBhTilgXSAgIFtkeW5hbWljYWxseSBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIGBUYCB1c2luZyAKKyAgICAgICAgYGEwYC4uLmBhTmAgYXMgYXJndW1lbnRzIGZvciB0aGUgY29uc3RydWN0b3IgaW52b2NhdGlvbi5dXQorICAgIFtbYEY6OnJlc3VsdF90eXBlYF0gW2lzIHRoZSB0eXBlIGBQYCB3aXRoIHRvcC1sZXZlbCBjdi1xdWFsaWZpZXJzIHJlbW92ZWQuXV0KK10KKworW2hlYWRpbmcgTGltaXRzXQorCitUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9GQUNUT1JZX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQgdGhlCittYXhpbXVtIGFyaXR5LiBJdCBkZWZhdWx0cyB0byAxMC4KKworW2VuZHNlY3RdCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbiBBY2tub3dsZWRnZW1lbnRzXQorCitFcmljIE5pZWJsZXIgcmVxdWVzdGVkIGEgZnVuY3Rpb24gdG8gaW52b2tlIGEgdHlwZSdzIGNvbnN0cnVjdG9yICh3aXRoIHRoZSAKK2FyZ3VtZW50cyBzdXBwbGllZCBhcyBhIFR1cGxlKSBhcyBhIEZ1c2lvbiBmZWF0dXJlLiBUaGVzZSBGYWN0b3J5IHV0aWxpdGllcyBhcmUKK2EgZmFjdG9yZWQtb3V0IGdlbmVyYWxpemF0aW9uIG9mIHRoaXMgaWRlYS4KKworRGF2ZSBBYnJhaGFtcyBzdWdnZXN0ZWQgU21hcnQgUG9pbnRlciBzdXBwb3J0IGZvciBleGNlcHRpb24gc2FmZXR5LCBwcm92aWRpbmcKK3VzZWZ1bCBoaW50cyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLgorCitKb2VsIGRlIEd1em1hbidzIGRvY3VtZW50YXRpb24gc3R5bGUgd2FzIGNvcGllZCBmcm9tIEZ1c2lvbi4KKworRnVydGhlciwgSSB3YW50IHRvIHRoYW5rIFBldGVyIERpbW92IGZvciBzaGFyaW5nIGhpcyBpbnNpZ2h0cyBvbiBsYW5ndWFnZQorZGV0YWlscyBhbmQgdGhlaXIgZXZvbHV0aW9uLgorCitbZW5kc2VjdF0KKworW3NlY3Rpb24gUmVmZXJlbmNlc10KKworIyBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVzaWduX1BhdHRlcm5zIERlc2lnbiBQYXR0ZXJuc10sCisgIEdhbW1hIGV0IGFsLiAtIEFkZGlzb24gV2VzbGV5IFB1Ymxpc2hpbmcsIDE5OTUKKworIyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC8gU3RhbmRhcmQgVGVtcGxhdGUgTGlicmFyeSBQcm9ncmFtbWVyJ3MgR3VpZGVdLCAKKyAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnksIDE5OTQKKworIyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvYmluZC9iaW5kLmh0bWwgQm9vc3QuQmluZF0sIAorICBQZXRlciBEaW1vdiwgMjAwMS0yMDA1CisKKyMgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIEJvb3N0LkZ1bmN0aW9uXSwKKyAgRG91Z2xhcyBHcmVnb3IsIDIwMDEtMjAwNAorCitbZW5kc2VjdF0KKworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTMxNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDYyMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KKzx0aXRsZT5DaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZhY3RvcnkgMS4wPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc4LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9GYWN0b3J5IDEuMCI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJjaGFwdGVyIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj4KKzxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkiPjwvYT5DaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZhY3RvcnkgMS4wPC9oMj48L2Rpdj4KKzxkaXY+PGRpdiBjbGFzcz0iYXV0aG9yIj48aDMgY2xhc3M9ImF1dGhvciI+Cis8c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Ub2JpYXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdXJuYW1lIj5TY2h3aW5nZXI8L3NwYW4+Cis8L2gzPjwvZGl2PjwvZGl2PgorPGRpdj48cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgJiMxNjk7IDIwMDcsIDIwMDggVG9iaWFzIFNjaHdpbmdlcjwvcD48L2Rpdj4KKzxkaXY+PGRpdiBjbGFzcz0ibGVnYWxub3RpY2UiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmxlZ2FsIj48L2E+PHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKKyAgICAgIDwvcD4KKzwvZGl2PjwvZGl2PgorPC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPgorPHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPgorPGRsIGNsYXNzPSJ0b2MiPgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5icmllZl9kZXNjcmlwdGlvbiI+QnJpZWYgRGVzY3JpcHRpb248L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmJhY2tncm91bmQiPkJhY2tncm91bmQ8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZSI+UmVmZXJlbmNlPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5hY2tub3dsZWRnZW1lbnRzIj5BY2tub3dsZWRnZW1lbnRzPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2VzIj5SZWZlcmVuY2VzPC9hPjwvc3Bhbj48L2R0PgorPC9kbD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmJyaWVmX2Rlc2NyaXB0aW9uIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmJyaWVmX2Rlc2NyaXB0aW9uIiB0aXRsZT0iQnJpZWYgRGVzY3JpcHRpb24iPkJyaWVmIERlc2NyaXB0aW9uPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgVGhlIHRlbXBsYXRlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48L2NvZGU+IGxldHMgeW91IGVuY2Fwc3VsYXRlIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPjwvY29kZT4gZXhwcmVzc2lvbiBhcyBhIGZ1bmN0aW9uIG9iamVjdCwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjwvY29kZT4KKyAgICAgIGVuY2Fwc3VsYXRlcyBhIGNvbnN0cnVjdG9yIGludm9jYXRpb24gd2l0aG91dCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+PC9jb2RlPi4KKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjwvY29kZT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KiZndDsoKSg8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gc2FtZSBhcyBuZXcgVChhcmcxLGFyZzIsYXJnMyk8L3NwYW4+CisKKzxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48L2NvZGU+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDsoKSg8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gc2FtZSBhcyBUKGFyZzEsYXJnMixhcmczKTwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBGb3IgdGVjaG5pY2FsIHJlYXNvbnMgdGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24gb2JqZWN0cyBoYXZlIHRvIGJlIExWYWx1ZXMuCisgICAgICBBIGZhY3RvcnkgdGhhdCBhbHNvIGFjY2VwdHMgUlZhbHVlcyBjYW4gYmUgY29tcG9zZWQgdXNpbmcgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9pbmRleC5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zm9yd2FyZF9hZGFwdGVyPC9zcGFuPjwvY29kZT48L2E+CisgICAgICBvciA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2JpbmQvYmluZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YmluZDwvc3Bhbj48L2NvZGU+PC9hPi4KKyAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5iYWNrZ3JvdW5kIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmJhY2tncm91bmQiIHRpdGxlPSJCYWNrZ3JvdW5kIj5CYWNrZ3JvdW5kPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgSW4gdHJhZGl0aW9uYWwgT2JqZWN0IE9yaWVudGVkIFByb2dyYW1taW5nIGEgRmFjdG9yeSBpcyBhbiBvYmplY3QgaW1wbGVtZW50aW5nCisgICAgICBhbiBpbnRlcmZhY2Ugb2Ygb25lIG9yIG1vcmUgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBvYmplY3RzIGNvbmZvcm1pbmcgdG8ga25vd24KKyAgICAgIGludGVyZmFjZXMuCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBhc3N1bWluZyBhX2NvbmNyZXRlX2NsYXNzIGFuZCBhbm90aGVyX2NvbmNyZXRlX2NsYXNzIGFyZSBkZXJpdmVkPC9zcGFuPgorPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZyb20gYW5fYWJzdHJhY3RfY2xhc3M8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cHVibGljPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52aXJ0dWFsPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5fYWJzdHJhY3RfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPio8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jcmVhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52aXJ0dWFsPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn07PC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2NvbmNyZXRlX2ZhY3Rvcnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj46PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cHVibGljPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5wdWJsaWM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZpcnR1YWw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbl9hYnN0cmFjdF9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNyZWF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfY29uY3JldGVfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpOzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59Ozwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5vdGhlcl9jb25jcmV0ZV9mYWN0b3J5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnB1YmxpYzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cHVibGljPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52aXJ0dWFsPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5fYWJzdHJhY3RfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPio8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jcmVhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbm90aGVyX2NvbmNyZXRlX2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1haW48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9wdHJfY29udGFpbmVyL2RvYy9wdHJfbWFwLmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wdHJfbWFwPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL3N0cmluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pbnNlcnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFfbmFtZSI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmF1dG9fcHRyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDsoPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9jb25jcmV0ZV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKTs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aW5zZXJ0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhbm90aGVyX25hbWUiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hdXRvX3B0cjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7KDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFub3RoZXJfY29uY3JldGVfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSk7PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmF1dG9fcHRyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbl9hYnN0cmFjdF9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnNvbWVfbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KS48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNyZWF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCkpOzwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIFRoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwgZHJhd2JhY2tzLiBUaGUgbW9zdCBvYnZpb3VzIG9uZSBpcyB0aGF0IHRoZXJlIGlzCisgICAgICBsb3RzIG9mIGJvaWxlcnBsYXRlIGNvZGUuIEluIG90aGVyIHdvcmRzIHRoZXJlIGlzIHRvbyBtdWNoIGNvZGUgdG8gZXhwcmVzcworICAgICAgYSByYXRoZXIgc2ltcGxlIGludGVudGlvbi4gV2UgY291bGQgdXNlIHRlbXBsYXRlcyB0byBnZXQgcmlkIG9mIHNvbWUgb2YgaXQKKyAgICAgIGJ1dCB0aGUgYXBwcm9hY2ggcmVtYWlucyBpbmZsZXhpYmxlOgorICAgIDwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICBXZSBtYXkgd2FudCBhIGZhY3RvcnkgdGhhdCB0YWtlcyBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlCisgICAgICAgICAgY29uc3RydWN0b3IsCisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICB3ZSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIHNtYXJ0IHBvaW50ZXJzLAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgd2UgbWF5IHdhbnQgc2V2ZXJhbCBtZW1iZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBkaWZmZXJlbnQga2luZHMgb2Ygb2JqZWN0cywKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIHdlIG1pZ2h0IG5vdCBuZWNlc3NhcmlseSBuZWVkIGEgcG9seW1vcnBoaWMgYmFzZSBjbGFzcyBmb3IgdGhlIG9iamVjdHMsCisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICBhcyB3ZSB3aWxsIHNlZSwgd2UgZG8gbm90IG5lZWQgYSBmYWN0b3J5IGJhc2UgY2xhc3MgYXQgYWxsLAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgd2UgbWlnaHQgd2FudCB0byBqdXN0IGNhbGwgdGhlIGNvbnN0cnVjdG9yIC0gd2l0aG91dCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+PC9jb2RlPgorICAgICAgICAgIHRvIGNyZWF0ZSBhbiBvYmplY3Qgb24gdGhlIHN0YWNrLCBhbmQKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIGZpbmFsbHkgd2UgbWlnaHQgd2FudCB0byB1c2UgY3VzdG9taXplZCBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICAgPC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KKyAgICAgIEV4cGVyaWVuY2UgaGFzIHNob3duIHRoYXQgdXNpbmcgZnVuY3Rpb24gb2JqZWN0cyBhbmQgZ2VuZXJpYyBCb29zdCBjb21wb25lbnRzCisgICAgICBmb3IgdGhlaXIgY29tcG9zaXRpb24sIERlc2lnbiBQYXR0ZXJucyB0aGF0IGRlc2NyaWJlIGNhbGxiYWNrIG1lY2hhbmlzbXMgKHR5cGljYWxseQorICAgICAgcmVxdWlyaW5nIGEgaGlnaCBwZXJjZW50YWdlIG9mIGJvaWxlcnBsYXRlIGNvZGUgd2l0aCBwdXJlIE9iamVjdCBPcmllbnRlZCBtZXRob2RvbG9neSkKKyAgICAgIGJlY29tZSBpbXBsZW1lbnRhYmxlIHdpdGgganVzdCBmZXcgY29kZSBsaW5lcyBhbmQgd2l0aG91dCBleHRyYSBjbGFzc2VzLgorICAgIDwvcD4KKzxwPgorICAgICAgRmFjdG9yaWVzIGFyZSBjYWxsYmFjayBtZWNoYW5pc21zIGZvciBjb25zdHJ1Y3RvcnMsIHNvIHdlIHByb3ZpZGUgdHdvIGNsYXNzCisgICAgICB0ZW1wbGF0ZXMsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PC9jb2RlPiwKKyAgICAgIHRoYXQgZW5jYXBzdWxhdGUgb2JqZWN0IGNvbnN0cnVjdGlvbiB2aWEgZGlyZWN0IGFwcGxpY2F0aW9uIG9mIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgYW5kIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+PC9jb2RlPiBvcGVyYXRvciwgcmVzcGVjdGl2ZWx5LgorICAgIDwvcD4KKzxwPgorICAgICAgV2UgbGV0IHRoZSBmdW5jdGlvbiBvYmplY3RzIGZvcndhcmQgdGhlaXIgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3Rpb24gZXhwcmVzc2lvbnMKKyAgICAgIHRoZXkgZW5jYXBzdWxhdGUuIE92ZXIgdGhpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PC9jb2RlPgorICAgICAgb3B0aW9uYWxseSBhbGxvd3MgdGhlIHVzZSBvZiBzbWFydCBwb2ludGVycyBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL2NvbmNlcHRzL2FsbG9jYXRvci5odG1sIiB0YXJnZXQ9Il90b3AiPkFsbG9jYXRvcnM8L2E+LgorICAgIDwvcD4KKzxwPgorICAgICAgQ29tcGlsZS10aW1lIHBvbHltb3JwaGlzbSBjYW4gYmUgdXNlZCB3aGVyZSBhcHByb3ByaWF0ZSwKKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZG9fc29tZXRoaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Yjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZm9yIGNvbmNlcHR1YWxseSBzaW1pbGFyIG9iamVjdHMgeCB3ZSBuZWl0aGVyIG5lZWQgdmlydHVhbDwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZnVuY3Rpb25zIG5vciBhIGNvbW1vbiBiYXNlIGNsYXNzIGluIHRoaXMgY29udGV4dC48L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgTm93LCB0byBhbGxvdyBpbmhvbW9nZW5lb3VzIHNpZ25hdHVyZXMgZm9yIHRoZSBjb25zdHJ1Y3RvcnMgb2YgdGhlIHR5cGVzIHBhc3NlZAorICAgICAgaW4gZm9yIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPiB3ZSBjYW4gdXNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PC9jb2RlPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJpbmQ8L3NwYW4+PC9jb2RlPjwvYT4KKyAgICAgIHRvIG5vcm1hbGl6ZSBiZXR3ZWVuIHRoZW0uCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VmFsdWVGYWN0b3J5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZG9fc29tZXRoaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5WYWx1ZUZhY3Rvcnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWtlX29iajwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5WYWx1ZUZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpKTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5WYWx1ZUZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vYmo8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZvciBjb25jZXB0dWFsbHkgc2ltaWxhciBvYmplY3RzIHggd2UgbmVpdGhlciBuZWVkIHZpcnR1YWw8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZ1bmN0aW9ucyBub3IgYSBjb21tb24gYmFzZSBjbGFzcyBpbiB0aGlzIGNvbnRleHQuPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFpbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZG9fc29tZXRoaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48L2NvZGU+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlg8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDsoKSk7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5kb19zb21ldGhpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YmluZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PC9jb2RlPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ZPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7KCksPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5fMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5fMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSk7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBjb25zdHJ1Y3QgWChhLGIpIGFuZCBZKGEsNSxiKSwgcmVzcGVjdGl2ZWx5Ljwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIE1heWJlIHdlIHdhbnQgb3VyIG9iamVjdHMgdG8gb3V0bGl2ZSB0aGUgZnVuY3Rpb24ncyBzY29wZSwgaW4gdGhpcyBjYXNlIHdlCisgICAgICBoYXZlIHRvIHVzZSBkeW5hbWljIGFsbG9jYXRpb247CisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RmFjdG9yeTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+d2hhdGV2ZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5kb19zb21ldGhpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZhY3Rvcnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5uZXdfb2JqPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpKTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnB0cjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5uZXdfb2JqPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5iPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBhZ2Fpbiwgbm8gY29tbW9uIGJhc2UgY2xhc3Mgb3IgdmlydHVhbCBmdW5jdGlvbnMgbmVlZGVkLDwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gd2UgY291bGQgZW5mb3JjZSBhIHBvbHltb3JwaGljIGJhc2UgYnkgd3JpdGluZyBlLmcuPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyAgICBib29zdDo6c2hhcmVkX3B0ciZsdDtiYXNlJmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gaW5zdGVhZCBvZjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gICAgdHlwZW5hbWUgRmFjdG9yeTo6cmVzdWx0X3R5cGU8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGFib3ZlLjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gTm90ZSB0aGF0IHdlIGFyZSBhbHNvIGZyZWUgdG8gaGF2ZSB0aGUgdHlwZSBlcmFzdXJlIGhhcHBlbiA8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHNvbWV3aGVyZSBlbHNlIChlLmcuIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGZ1bmN0aW9uJ3M8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHJlc3VsdCB0eXBlKS48L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi4gY2FsbCBkb19zb21ldGhpbmcgbGlrZSBhYm92ZSBidXQgd2l0aCBfX2ZhY3RvcnlfXyBpbnN0ZWFkPC9zcGFuPgorPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIG9mIF9fdmFsdWVfZmFjdG9yeV9fXTwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBBbHRob3VnaCB3ZSBtaWdodCBoYXZlIGNyZWF0ZWQgcG9seW1vcnBoaWMgb2JqZWN0cyBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwKKyAgICAgIHdlIGhhdmUgdXNlZCBjb21waWxlIHRpbWUgcG9seW1vcnBoaXNtIGZvciB0aGUgZmFjdG9yeS4gSWYgd2Ugd2FudCB0byBlcmFzZQorICAgICAgdGhlIHR5cGUgb2YgdGhlIGZhY3RvcnkgYW5kIHRodXMgYWxsb3cgcG9seW1vcnBoaXNtIGF0IHJ1biB0aW1lLCB3ZSBjYW4gdXNlCisgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPkJvb3N0LkZ1bmN0aW9uPC9hPgorICAgICAgdG8gZG8gc28uIFRoZSBmaXJzdCBleGFtcGxlIGNhbiBiZSByZXdyaXR0ZW4gYXMgZm9sbG93cy4KKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5fYWJzdHJhY3RfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiooKTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1haW48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL21hcC5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1hcDwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9zdHJpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PC9jb2RlPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYV9uYW1lIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48L2NvZGU+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfY29uY3JldGVfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiomZ3Q7KCk7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPls8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFub3RoZXJfbmFtZSI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl08L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPgorICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PC9jb2RlPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbm90aGVyX2NvbmNyZXRlX2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qJmd0OygpOzwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIE9mIGNvdXJzZSB3ZSBjYW4ganVzdCBhcyBlYXN5IGNyZWF0ZSBmYWN0b3JpZXMgdGhhdCB0YWtlIGFyZ3VtZW50cyBhbmQvb3IgcmV0dXJuCisgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3NtYXJ0X3B0ci9pbmRleC5odG1sIiB0YXJnZXQ9Il90b3AiPlNtYXJ0IFBvaW50ZXJzPC9hPi4KKyAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlIiB0aXRsZT0iUmVmZXJlbmNlIj5SZWZlcmVuY2U8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5Ij52YWx1ZV9mYWN0b3J5PC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeSI+ZmFjdG9yeTwvYT48L3NwYW4+PC9kdD4KKzwvZGw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5Ij48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5IiB0aXRsZT0idmFsdWVfZmFjdG9yeSI+dmFsdWVfZmFjdG9yeTwvYT4KKzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaDAiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmRlc2NyaXB0aW9uIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5kZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIEZ1bmN0aW9uIG9iamVjdCB0ZW1wbGF0ZSB0aGF0IGludm9rZXMgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPi4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oMSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaGVhZGVyIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oZWFkZXIiPkhlYWRlcjwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InByZXByb2Nlc3NvciI+I2luY2x1ZGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aHBwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorPC9wcmU+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaDIiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LnN5bm9wc2lzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5zeW5vcHNpcyI+U3lub3BzaXM8L2E+CisgICAgICA8L2g1PgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3RhdGlvbjwvYj48L3A+Cis8ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBhcmJpdHJhcnkgdHlwZSB3aXRoIGF0IGxlYXN0IG9uZSBwdWJsaWMgY29uc3RydWN0b3IKKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhcmd1bWVudCBMVmFsdWVzIHRvIGEgY29uc3RydWN0b3Igb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oMyI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmV4cHJlc3Npb25fc2VtYW50aWNzIj5FeHByZXNzaW9uCisgICAgICAgIFNlbWFudGljczwvYT4KKyAgICAgIDwvaDU+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9InRhYmxlIj4KKzxjb2xncm91cD4KKzxjb2w+Cis8Y29sPgorPC9jb2xncm91cD4KKzx0aGVhZD48dHI+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RoPgorPHRoPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgU2VtYW50aWNzCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RoPgorPC90cj48L3RoZWFkPgorPHRib2R5PgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICByZXR1cm5zIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGlzIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuaDQiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmxpbWl0cyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkubGltaXRzIj5MaW1pdHM8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFRoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX1ZBTFVFX0ZBQ1RPUllfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldAorICAgICAgICB0aGUgbWF4aW11bSBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisgICAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkiIHRpdGxlPSJmYWN0b3J5Ij5mYWN0b3J5PC9hPgorPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oMCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuZGVzY3JpcHRpb24iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmRlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgRnVuY3Rpb24gb2JqZWN0IHRlbXBsYXRlIHRoYXQgZHluYW1pY2FsbHkgY29uc3RydWN0cyBhIHBvaW50ZWUgb2JqZWN0IGZvcgorICAgICAgICB0aGUgdHlwZSBvZiBwb2ludGVyIGdpdmVuIGFzIHRlbXBsYXRlIGFyZ3VtZW50LiBTbWFydCBwb2ludGVycyBtYXkgYmUgdXNlZAorICAgICAgICBmb3IgdGhlIHRlbXBsYXRlIGFyZ3VtZW50LCBnaXZlbiB0aGF0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cG9pbnRlZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UG9pbnRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50eXBlPC9zcGFuPjwvY29kZT4KKyAgICAgICAgeWllbGRzIHRoZSBwb2ludGVlIHR5cGUuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgSWYgYW4gPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL2NvbmNlcHRzL2FsbG9jYXRvci5odG1sIiB0YXJnZXQ9Il90b3AiPkFsbG9jYXRvcjwvYT4KKyAgICAgICAgaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgcGxhY2VtZW50IGZvcm0gb2YgdGhlCisgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj48L2NvZGU+IG9wZXJhdG9yIGlzIHVzZWQgdG8gY29uc3RydWN0CisgICAgICAgIHRoZSBvYmplY3QuIEEgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FsbHMgdGhlIGRlc3RydWN0b3IgYW5kIGRlYWxsb2NhdGVzIHRoZQorICAgICAgICBtZW1vcnkgd2l0aCBhIGNvcHkgb2YgdGhlIEFsbG9jYXRvciBpcyB1c2VkIGZvciB0aGUgc2Vjb25kIGNvbnN0cnVjdG9yIGFyZ3VtZW50CisgICAgICAgIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlBvaW50ZXI8L3NwYW4+PC9jb2RlPiAodGh1cyBpdCBtdXN0CisgICAgICAgIGJlIGEgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zbWFydF9wdHIvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj5TbWFydCBQb2ludGVyPC9hPgorICAgICAgICB0aGF0IHByb3ZpZGVzIGEgc3VpdGFibGUgY29uc3RydWN0b3IsIHN1Y2ggYXMgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zbWFydF9wdHIvc2hhcmVkX3B0ci5odG0iIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zaGFyZWRfcHRyPC9zcGFuPjwvY29kZT48L2E+KS4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBJZiBhIHRoaXJkIHRlbXBsYXRlIGFyZ3VtZW50IGlzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3RvcnlfcGFzc2VzX2FsbG9jX3RvX3NtYXJ0X3BvaW50ZXI8L3NwYW4+PC9jb2RlPiwKKyAgICAgICAgdGhlIGFsbG9jYXRvciBpdHNlbGYgaXMgdXNlZCBmb3IgdGhlIHRoaXJkIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlBvaW50ZXI8L3NwYW4+PC9jb2RlPiAoPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zbWFydF9wdHIvc2hhcmVkX3B0ci5odG0iIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zaGFyZWRfcHRyPC9zcGFuPjwvY29kZT48L2E+IHRoZW4gdXNlcyB0aGUgYWxsb2NhdG9yCisgICAgICAgIHRvIG1hbmFnZSB0aGUgbWVtb3J5IG9mIGl0cyBzZXBhcmF0ZWx5IGFsbG9jYXRlZCByZWZlcmVuY2UgY291bnRlcikuCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaDEiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmhlYWRlciI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaGVhZGVyIj5IZWFkZXI8L2E+CisgICAgICA8L2g1PgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJwcmVwcm9jZXNzb3IiPiNpbmNsdWRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmhwcDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzwvcHJlPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmgyIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5zeW5vcHNpcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3Rvcnkuc3lub3BzaXMiPlN5bm9wc2lzPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3RvcnlfYWxsb2NfcHJvcGFnYXRpb248L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeV9wYXNzZXNfYWxsb2NfdG9fc21hcnRfcG9pbnRlcjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlBvaW50ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkFsbG9jYXRvcjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5vbmVfdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3RvcnlfYWxsb2NfcHJvcGFnYXRpb248L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5BbGxvY1Byb3A8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3RvcnlfYWxsb2NfZm9yX3BvaW50ZWVfYW5kX2RlbGV0ZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzwvcHJlPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+Tm90YXRpb248L2I+PC9wPgorPGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYW4gYXJiaXRyYXJ5IHR5cGUgd2l0aCBhdCBsZWFzdCBvbmUgcHVibGljIGNvbnN0cnVjdG9yCisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UDwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIHBvaW50ZXIgb3Igc21hcnQgcG9pbnRlciB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhcmd1bWVudCBMVmFsdWVzIHRvIGEgY29uc3RydWN0b3Igb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oMyI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmV4cHJlc3Npb25fc2VtYW50aWNzIj5FeHByZXNzaW9uCisgICAgICAgIFNlbWFudGljczwvYT4KKyAgICAgIDwvaDU+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9InRhYmxlIj4KKzxjb2xncm91cD4KKzxjb2w+Cis8Y29sPgorPC9jb2xncm91cD4KKzx0aGVhZD48dHI+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RoPgorPHRoPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgU2VtYW50aWNzCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RoPgorPC90cj48L3RoZWFkPgorPHRib2R5PgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBkeW5hbWljYWxseSBjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgICAgdXNpbmcgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4gYXMgYXJndW1lbnRzIGZvciB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgICAgICAgICAgIGludm9jYXRpb24uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgaXMgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UDwvc3Bhbj48L2NvZGU+IHdpdGgKKyAgICAgICAgICAgICAgICAgIHRvcC1sZXZlbCBjdi1xdWFsaWZpZXJzIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5Lmg0Ij48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5saW1pdHMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmxpbWl0cyI+TGltaXRzPC9hPgorICAgICAgPC9oNT4KKzxwPgorICAgICAgICBUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9GQUNUT1JZX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQgdGhlIG1heGltdW0KKyAgICAgICAgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDEwLgorICAgICAgPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5hY2tub3dsZWRnZW1lbnRzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmFja25vd2xlZGdlbWVudHMiIHRpdGxlPSJBY2tub3dsZWRnZW1lbnRzIj5BY2tub3dsZWRnZW1lbnRzPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgRXJpYyBOaWVibGVyIHJlcXVlc3RlZCBhIGZ1bmN0aW9uIHRvIGludm9rZSBhIHR5cGUncyBjb25zdHJ1Y3RvciAod2l0aCB0aGUKKyAgICAgIGFyZ3VtZW50cyBzdXBwbGllZCBhcyBhIFR1cGxlKSBhcyBhIEZ1c2lvbiBmZWF0dXJlLiBUaGVzZSBGYWN0b3J5IHV0aWxpdGllcworICAgICAgYXJlIGEgZmFjdG9yZWQtb3V0IGdlbmVyYWxpemF0aW9uIG9mIHRoaXMgaWRlYS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIERhdmUgQWJyYWhhbXMgc3VnZ2VzdGVkIFNtYXJ0IFBvaW50ZXIgc3VwcG9ydCBmb3IgZXhjZXB0aW9uIHNhZmV0eSwgcHJvdmlkaW5nCisgICAgICB1c2VmdWwgaGludHMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICA8L3A+Cis8cD4KKyAgICAgIEpvZWwgZGUgR3V6bWFuJ3MgZG9jdW1lbnRhdGlvbiBzdHlsZSB3YXMgY29waWVkIGZyb20gRnVzaW9uLgorICAgIDwvcD4KKzxwPgorICAgICAgRnVydGhlciwgSSB3YW50IHRvIHRoYW5rIFBldGVyIERpbW92IGZvciBzaGFyaW5nIGhpcyBpbnNpZ2h0cyBvbiBsYW5ndWFnZSBkZXRhaWxzCisgICAgICBhbmQgdGhlaXIgZXZvbHV0aW9uLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZXMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlcyIgdGl0bGU9IlJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZXNpZ25fUGF0dGVybnMiIHRhcmdldD0iX3RvcCI+RGVzaWduIFBhdHRlcm5zPC9hPiwKKyAgICAgICAgICBHYW1tYSBldCBhbC4gLSBBZGRpc29uIFdlc2xleSBQdWJsaXNoaW5nLCAxOTk1CisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvIiB0YXJnZXQ9Il90b3AiPlN0YW5kYXJkIFRlbXBsYXRlIExpYnJhcnkgUHJvZ3JhbW1lcidzCisgICAgICAgICAgR3VpZGU8L2E+LCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSwgMTk5NAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5CaW5kPC9hPiwKKyAgICAgICAgICBQZXRlciBEaW1vdiwgMjAwMS0yMDA1CisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPkJvb3N0LkZ1bmN0aW9uPC9hPiwKKyAgICAgICAgICBEb3VnbGFzIEdyZWdvciwgMjAwMS0yMDA0CisgICAgICAgIDwvbGk+Cis8L29sPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PHA+PHNtYWxsPkxhc3QgcmV2aXNlZDogTm92ZW1iZXIgMDEsIDIwMDggYXQgMjE6NDQ6NTIgR01UPC9zbWFsbD48L3A+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPjwvZGl2PjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdCBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2FmNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0CkBAIC0wLDAgKzEgQEAKK2luZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDMwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD1kb2MvaHRtbC9pbmRleC5odG1sIj4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gZmFpbGVkLCBjbGljayB0aGlzIAorICAgIDxhIGhyZWY9ImRvYy9odG1sL2luZGV4Lmh0bWwiPmxpbms8L2E+ICZuYnNwOzxocj4KKyAgICA8cD6pIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyLCAyMDA5PC9wPgorICAgIDxwPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSAKKyAgICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPgorICAgIExJQ0VOU0VfMV8wLnR4dDwvYT4gb3IgY29weSBhdAorICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvcD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9KYW1maWxlIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGY2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L0phbWZpbGUKQEAgLTAsMCArMSwxOCBAQAorCisjIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgorIworIyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCisjIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6L1wvd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorCitpbXBvcnQgdGVzdGluZyA7CisKK3Byb2plY3QgZmFjdG9yeS10ZXN0cworICAgIDsKKwordGVzdC1zdWl0ZSBmdW5jdGlvbmFsL2ZhY3RvcnkKKyAgICA6CisgICAgICBbIHJ1biB2YWx1ZV9mYWN0b3J5LmNwcCBdCisgICAgICBbIHJ1biBmYWN0b3J5LmNwcCBdCisgICAgICBbIHJ1biBmYWN0b3J5X3dpdGhfYWxsb2NhdG9yLmNwcCBdCisgICAgOworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3RvcnkuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9mYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ3ZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9mYWN0b3J5LmNwcApAQCAtMCwwICsxLDM2IEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKKyAgCisgICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKyAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mYWN0b3J5LmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK2NsYXNzIHN1bSAKK3sKKyAgICBpbnQgdmFsX3N1bTsKKyAgcHVibGljOgorICAgIHN1bShpbnQgYSwgaW50IGIpIDogdmFsX3N1bShhICsgYikgeyB9CisKKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0aGlzLT52YWxfc3VtOyB9Cit9OworCitpbnQgbWFpbigpCit7CisgICAgaW50IG9uZSA9IDEsIHR3byA9IDI7CisgICAgeworICAgICAgc3VtKiBpbnN0YW5jZSggbmRuYm9vc3Q6OmZhY3Rvcnk8IHN1bSogPigpKG9uZSx0d28pICk7CisgICAgICBCT09TVF9URVNUKCppbnN0YW5jZSA9PSAzKTsKKyAgICB9CisgICAgeworICAgICAgc3RkOjphdXRvX3B0cjxzdW0+IGluc3RhbmNlKCBuZG5ib29zdDo6ZmFjdG9yeTwgc3RkOjphdXRvX3B0cjxzdW0+ID4oKShvbmUsdHdvKSApOworICAgICAgQk9PU1RfVEVTVCgqaW5zdGFuY2UgPT0gMyk7CisgICAgfQorICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3Rvcnlfd2l0aF9hbGxvY2F0b3IuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9mYWN0b3J5X3dpdGhfYWxsb2NhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM2Yzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC9mYWN0b3J5X3dpdGhfYWxsb2NhdG9yLmNwcApAQCAtMCwwICsxLDc5IEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKKyAgCisgICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKyAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mYWN0b3J5LmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxib29zdC9zaGFyZWRfcHRyLmhwcD4KKwordXNpbmcgc3RkOjpzaXplX3Q7CisKK2NsYXNzIHN1bSAKK3sKKyAgICBpbnQgdmFsX3N1bTsKKyAgcHVibGljOgorICAgIHN1bShpbnQgYSwgaW50IGIpIDogdmFsX3N1bShhICsgYikgeyB9CisKKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0aGlzLT52YWxfc3VtOyB9Cit9OworCit0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+CitjbGFzcyBjb3VudGluZ19hbGxvY2F0b3IgOiBwdWJsaWMgc3RkOjphbGxvY2F0b3I8VD4KK3sKKyAgcHVibGljOgorICAgIGNvdW50aW5nX2FsbG9jYXRvcigpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgT3RoZXJUID4KKyAgICBzdHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBjb3VudGluZ19hbGxvY2F0b3I8T3RoZXJUPiBvdGhlcjsgfTsKKworICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBPdGhlclQgPgorICAgIGNvdW50aW5nX2FsbG9jYXRvcihjb3VudGluZ19hbGxvY2F0b3I8T3RoZXJUPiBjb25zdCYgdGhhdCkKKyAgICB7IH0KKworICAgIHN0YXRpYyBzaXplX3Qgbl9hbGxvY2F0ZWQ7CisgICAgVCogYWxsb2NhdGUoc2l6ZV90IG4sIHZvaWQgY29uc3QqIGhpbnQgPSAwbCkKKyAgICB7CisgICAgICAgIG5fYWxsb2NhdGVkICs9IDE7CisgICAgICAgIHJldHVybiBzdGQ6OmFsbG9jYXRvcjxUPjo6YWxsb2NhdGUobixoaW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IG5fZGVhbGxvY2F0ZWQ7CisgICAgdm9pZCBkZWFsbG9jYXRlKFQqIHB0ciwgc2l6ZV90IG4pCisgICAgeworICAgICAgICBuX2RlYWxsb2NhdGVkICs9IDE7CisgICAgICAgIHJldHVybiBzdGQ6OmFsbG9jYXRvcjxUPjo6ZGVhbGxvY2F0ZShwdHIsbik7CisgICAgfQorfTsKK3RlbXBsYXRlPCB0eXBlbmFtZSBUID4gc2l6ZV90IGNvdW50aW5nX2FsbG9jYXRvcjxUPjo6bl9hbGxvY2F0ZWQgPSAwOwordGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzaXplX3QgY291bnRpbmdfYWxsb2NhdG9yPFQ+OjpuX2RlYWxsb2NhdGVkID0gMDsKKworaW50IG1haW4oKQoreworICAgIGludCBvbmUgPSAxLCB0d28gPSAyOworICAgIHsKKyAgICAgIG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4gaW5zdGFuY2UoCisgICAgICAgICAgbmRuYm9vc3Q6OmZhY3Rvcnk8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4sIGNvdW50aW5nX2FsbG9jYXRvcjx2b2lkPiwgCisgICAgICAgICAgICAgIG5kbmJvb3N0OjpmYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyID4oKShvbmUsdHdvKSApOworICAgICAgQk9PU1RfVEVTVCgqaW5zdGFuY2UgPT0gMyk7CisgICAgfQorICAgIEJPT1NUX1RFU1QoY291bnRpbmdfYWxsb2NhdG9yPHN1bT46Om5fYWxsb2NhdGVkID09IDEpOyAKKyAgICBCT09TVF9URVNUKGNvdW50aW5nX2FsbG9jYXRvcjxzdW0+OjpuX2RlYWxsb2NhdGVkID09IDEpOworICAgIHsKKyAgICAgIG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4gaW5zdGFuY2UoCisgICAgICAgICAgbmRuYm9vc3Q6OmZhY3Rvcnk8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPHN1bT4sIGNvdW50aW5nX2FsbG9jYXRvcjx2b2lkPiwKKyAgICAgICAgICAgICAgbmRuYm9vc3Q6OmZhY3RvcnlfcGFzc2VzX2FsbG9jX3RvX3NtYXJ0X3BvaW50ZXIgPigpKG9uZSx0d28pICk7CisgICAgICBCT09TVF9URVNUKCppbnN0YW5jZSA9PSAzKTsKKyAgICB9CisgICAgQk9PU1RfVEVTVChjb3VudGluZ19hbGxvY2F0b3I8c3VtPjo6bl9hbGxvY2F0ZWQgPT0gMik7IAorICAgIEJPT1NUX1RFU1QoY291bnRpbmdfYWxsb2NhdG9yPHN1bT46Om5fZGVhbGxvY2F0ZWQgPT0gMik7CisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvdmFsdWVfZmFjdG9yeS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L3ZhbHVlX2ZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NjJmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L3ZhbHVlX2ZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsMjkgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgVG9iaWFzIFNjaHdpbmdlcgorICAKKyAgICBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorICAgIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL3ZhbHVlX2ZhY3RvcnkuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworY2xhc3Mgc3VtIAoreworICAgIGludCB2YWxfc3VtOworICBwdWJsaWM6CisgICAgc3VtKGludCBhLCBpbnQgYikgOiB2YWxfc3VtKGEgKyBiKSB7IH0KKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0aGlzLT52YWxfc3VtOyB9Cit9OworCitpbnQgbWFpbigpCit7CisgICAgaW50IG9uZSA9IDEsIHR3byA9IDI7CisgICAgeworICAgICAgc3VtIGluc3RhbmNlKCBuZG5ib29zdDo6dmFsdWVfZmFjdG9yeTwgc3VtID4oKShvbmUsdHdvKSApOworICAgICAgQk9PU1RfVEVTVChpbnN0YW5jZSA9PSAzKTsKKyAgICB9CisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9KYW1maWxlIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2NTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9KYW1maWxlCkBAIC0wLDAgKzEsMTkgQEAKKworIyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKKyMKKyMgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAorIyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi9cL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKwordXNpbmcgcXVpY2tib29rIDsKKworeG1sIGZvcndhcmQgOiBmb3J3YXJkLnFiayA7Citib29zdGJvb2sgc3RhbmRhbG9uZSA6IGZvcndhcmQKKyAgOgorICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LnJvb3Q9Li4vLi4vLi4vLi4vLi4KKyAgICAgICAgPHhzbDpwYXJhbT5ib29zdC5saWJyYXJpZXM9Li4vLi4vLi4vLi4vbGlicmFyaWVzLmh0bQorICAgICAgICA8eHNsOnBhcmFtPmNodW5rLnNlY3Rpb24uZGVwdGg9MAorICAgICAgICA8eHNsOnBhcmFtPmNodW5rLmZpcnN0LnNlY3Rpb25zPTAKKyAgICAgICAgPHhzbDpwYXJhbT5nZW5lcmF0ZS5zZWN0aW9uLnRvYy5sZXZlbD0yCisgICAgICAgIDx4c2w6cGFyYW0+dG9jLm1heC5kZXB0aD0xCisgIDsKKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2ZvcndhcmQucWJrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2ZvcndhcmQucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjIyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvZm9yd2FyZC5xYmsKQEAgLTAsMCArMSwzMTYgQEAKK1tsaWJyYXJ5IEJvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZAorICBbcXVpY2tib29rIDEuM10KKyAgW3ZlcnNpb24gMS4wXQorICBbYXV0aG9ycyBbU2Nod2luZ2VyLCBUb2JpYXNdXQorICBbY29weXJpZ2h0IDIwMDcgMjAwOCBUb2JpYXMgU2Nod2luZ2VyXQorICBbbGljZW5zZQorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisgICAgICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0XSkKKyAgXQorICBbcHVycG9zZSBGdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMgZm9yIGdlbmVyaWMgYXJndW1lbnQgZm9yd2FyZGluZy5dCisgIFtjYXRlZ29yeSBoaWdoZXItb3JkZXJdCisgIFtjYXRlZ29yeSBnZW5lcmljXQorICBbbGFzdC1yZXZpc2lvbiAkRGF0ZTogMjAwOC8xMS8wMSAxOTo1ODo1MCAkXQorXQorCitbZGVmIF9fdW5zcGVjaWZpZWRfXyAgICAgICAgICAgIC91bnNwZWNpZmllZC9dCitbZGVmIF9fYm9vc3RfcmVmX18gICAgICAgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwgQm9vc3QuUmVmXV0KK1tkZWYgX19ib29zdF9yZXN1bHRfb2ZfXyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIEJvb3N0LlJlc3VsdE9mXV0KK1tkZWYgX19ib29zdF9fcmVzdWx0X29mX18gICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIGBib29zdDo6cmVzdWx0X29mYF1dCitbZGVmIF9fdGhlX2ZvcndhcmRpbmdfcHJvYmxlbV9fIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0gVGhlIEZvcndhcmRpbmcgUHJvYmxlbV1dCitbZGVmIF9fYm9vc3RfZnVzaW9uX18gICAgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdXNpb24vZG9jL2h0bWwvaW5kZXguaHRtbCBCb29zdC5GdXNpb25dXQorCitbc2VjdGlvbiBCcmllZiBEZXNjcmlwdGlvbl0KKworYGJvb3N0Ojpmb3J3YXJkX2FkYXB0ZXJgIHByb3ZpZGVzIGEgcmV1c2FibGUgYWRhcHRlciB0ZW1wbGF0ZSBmb3IgZnVuY3Rpb24KK29iamVjdHMuIEl0IGZvcndhcmRzIFJWYWx1ZXMgYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgd2hpbGUgbGVhdmluZyBMVmFsdWVzCithcy1pcy4KKworICAgIHN0cnVjdCBnIC8vIGZ1bmN0aW9uIG9iamVjdCB0aGF0IG9ubHkgYWNjZXB0IExWYWx1ZXMKKyAgICB7CisgICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4KKyAgICAgICAgdm9pZCBvcGVyYXRvcigpKFQwICYgdDAsIFQxICYgdDEsIFQyICYgdDIpIGNvbnN0OworCisgICAgICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgICAgLy8gQWRhcHRlZCB2ZXJzaW9uIGFsc28gYWNjZXB0cyBSVmFsdWVzIGFuZCBmb3J3YXJkcworICAgIC8vIHRoZW0gYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgTFZhbHVlcyBhcy1pcworICAgIHR5cGVkZWYgYm9vc3Q6OmZvcndhcmRfYWRhcHRlcjxnPiBmOworCitBbm90aGVyIGFkYXB0ZXIsIGBib29zdDo6bGlnaHdlaWdodF9mb3J3YXJkX2FkYXB0ZXJgIGFsbG93cyBmb3J3YXJkaW5nIHdpdGggCitzb21lIGhlbHAgZnJvbSB0aGUgdXNlciBhY2NlcHRpbmcgYW5kIHVud3JhcHBpbmcgcmVmZXJlbmNlIHdyYXBwZXJzIChzZWUgCitfX2Jvb3N0X3JlZl9fKSBmb3IgcmVmZXJlbmNlIGFyZ3VtZW50cywgY29uc3QgcXVhbGlmeWluZyBhbGwgb3RoZXIgYXJndW1lbnRzLiAKKworVGhlIHRhcmdldCBmdW5jdGlvbnMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggX19ib29zdF9yZXN1bHRfb2ZfXywgYW5kIHNvIGFyZQordGhlIGFkYXB0ZXJzLgorCitbZW5kc2VjdF0KKworW3NlY3Rpb24gQmFja2dyb3VuZF0KKworTGV0J3Mgc3VwcG9zZSB3ZSBoYXZlIHNvbWUgZnVuY3Rpb24gYGZgIHRoYXQgd2UgY2FuIGNhbGwgbGlrZSB0aGlzOgorCisgICAgZigxMjMsYV92YXJpYWJsZSk7CisKK05vdyB3ZSB3YW50IHRvIHdyaXRlIGFub3RoZXIsIGdlbmVyaWMgZnVuY3Rpb24gYGdgIHRoYXQgY2FuIGJlIGNhbGxlZCB0aGUKK3NhbWUgd2F5IGFuZCByZXR1cm5zIHNvbWUgb2JqZWN0IHRoYXQgY2FsbHMgYGZgIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgorCisgICAgZigxMjMsYV92YXJpYWJsZSkgPT0gZyhmLDEyMyxhX3ZhcmlhYmxlKS5jYWxsX2YoKQorCitbaGVhZGluZyBXaHkgd291bGQgd2Ugd2FudCB0byBkbyBpdCwgYW55d2F5P10KKworTWF5YmUgd2Ugd2FudCB0byBydW4gYGZgIHNldmVyYWwgdGltZXMuIE9yIG1heWJlIHdlIHdhbnQgdG8gcnVuIGl0IHdpdGhpbgorYW5vdGhlciB0aHJlYWQuIE1heWJlIHdlIGp1c3Qgd2FudCB0byBlbmNhcHN1bGF0ZSB0aGUgY2FsbCBleHByZXNzaW9uIGZvciBub3csIAorYW5kIHRoZW4gdXNlIGl0IHdpdGggb3RoZXIgY29kZSB0aGF0IGFsbG93cyB0byBjb21wb3NlIG1vcmUgY29tcGxleCBleHByZXNzaW9ucworaW4gb3JkZXIgdG8gZGVjb21wb3NlIGl0IHdpdGggQysrIHRlbXBsYXRlcyBhbmQgaGF2ZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgc29tZSAKK21hY2hpbmVyeSB0aGF0IGV2ZW50dWFsbHkgY2FsbHMgYGZgIGF0IHJ1bnRpbWUgKGluIG90aGVyIHdvcmRzOyBhcHBseSBhCit0ZWNobmlxdWUgdGhhdCBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcyBFeHByZXNzaW9uIFRlbXBsYXRlcykuIAorCitbaGVhZGluZyBOb3csIGhvdyBkbyB3ZSBkbyBpdD9dCisKK1RoZSBiYWQgbmV3cyBpczogSXQncyBpbXBvc3NpYmxlLiAKKworVGhhdCBpcyBzbyBiZWNhdXNlIHRoZXJlIGlzIGEgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiBhIHZhcmlhYmxlIGFuZCBhbgorZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBpdHMgdmFsdWU6IEdpdmVuCisKKyAgICBpbnQgeTsKKyAgICBpbnQgY29uc3QgeiA9IDA7CisKK2FuZAorCisgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMxKFQgJiB4KTsKKword2UgY2FuIGNhbGwKKworICAgIGZ1bmMxKHkpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLWNvbnN0IG9iamVjdAorICAgIGZ1bmMxKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0CisKK3doZXJlCisKKyAgICBmdW5jMSgxKTsgLy8gZmFpbHMgdG8gY29tcGlsZS4KKworVGhpcyB3YXkgd2UgY2FuIHNhZmVseSBoYXZlIGBmdW5jMWAgc3RvcmUgaXRzIHJlZmVyZW5jZSBhcmd1bWVudCBhbmQgdGhlIAorY29tcGlsZXIga2VlcHMgdXMgZnJvbSBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB3aXRoIHRlbXBvcmFyeSBsaWZldGltZS4KKworSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBub24tY29uc3RuZXNzIGFuZCB3aGV0aGVyIGFuIG9iamVjdCBiaW5kcyB0byBhCitub24tY29uc3QgcmVmZXJlbmNlIHBhcmFtZXRlciBhcmUgdHdvIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBUaGUgbGF0dGVyIGlzIHRoZQorZGlzdGluY3Rpb24gYmV0d2VlbiBMVmFsdWVzIGFuZCBSVmFsdWVzLiBUaGUgbmFtZXMgc3RlbSBmcm9tIHRoZSBsZWZ0IGhhbmQgc2lkZQorYW5kIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBleHByZXNzaW9ucywgdGh1cyBMVmFsdWVzIGFyZSB0eXBpY2FsbHkKK3RoZSBvbmVzIHlvdSBjYW4gYXNzaWduIHRvLCBhbmQgUlZhbHVlcyB0aGUgdGVtcG9yYXJ5IHJlc3VsdHMgZnJvbSB0aGUgcmlnaHQKK2hhbmQgc2lkZSBleHByZXNzaW9uLiAKKworICAgIHkgPSAxKzI7ICAgICAgICAvLyBhIGlzIExWYWx1ZSwgMSsyIGlzIHRoZSBleHByZXNzaW9uIHByb2R1Y2luZyB0aGUgUlZhbHVlLAorICAgIC8vIDErMiA9IGE7ICAgICAvLyB1c3VhbGx5IG1ha2VzIG5vIHNlbnNlLiAKKworICAgIGZ1bmMxKHkpOyAgICAgICAvLyB3b3JrcywgYmVjYXVzZSB5IGlzIGFuIExWYWx1ZQorICAgIC8vIGZ1bmMxKDErMik7ICAvLyBmYWlscyB0byBjb21waWxlLCBiZWNhdXNlIHdlIG9ubHkgZ290IGFuIFJWYWx1ZS4KKworSWYgd2UgYWRkIGNvbnN0IHF1YWxpZmljYXRpb24gb24gdGhlIHBhcmFtZXRlciwgb3VyIGZ1bmN0aW9uIGFsc28gYWNjZXB0cworUlZhbHVlczogCisKKyAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHZvaWQgZnVuYzIoVCBjb25zdCAmIHgpOworCisgICAgLy8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6CisgICAgZnVuYzIoMSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCB0ZW1wb3JhcnksIG9iamVjdCwKKyAgICBmdW5jMih5KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCwgd2hpbGUgeSBpcyBub3QgY29uc3QsIGFuZAorICAgIGZ1bmMyKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0LCBqdXN0IGxpa2Ugei4KKworSW4gYWxsIGNhc2VzLCB0aGUgYXJndW1lbnQgYHhgIGluIGBmdW5jMmAgaXMgYSBjb25zdC1xdWFsaWZpZWQgTFZhbHVlLgorV2UgY2FuIHVzZSBmdW5jdGlvbiBvdmVybG9hZGluZyB0byBpZGVudGlmeSBub24tY29uc3QgTFZhbHVlczoKKworICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gdm9pZCBmdW5jMyhUIGNvbnN0ICYgeCk7IC8vICMxCisgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMzKFQgJiB4KTsgICAgICAgLy8gIzIKKworICAgIC8vIFsuLi5dIGZ1bmN0aW9uIHNjb3BlOgorICAgIGZ1bmMzKDEpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3QsIHRlbXBvcmFyeSBvYmplY3QgaW4gIzEsCisgICAgZnVuYzMoeSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBub24tY29uc3Qgb2JqZWN0IGluICMyLCBhbmQKKyAgICBmdW5jMyh6KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCBpbiAjMS4KKworTm90ZSB0aGF0IGFsbCBhcmd1bWVudHMgYHhgIGluIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIGBmdW5jM2AgYXJlIExWYWx1ZXMuCitJbiBmYWN0LCB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNwb3J0IFJWYWx1ZXMgaW50byBhIGZ1bmN0aW9uIGFzLWlzIGluIEMrKzk4LgorQWxzbyBub3RlIHRoYXQgd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB3aGF0IHVzZWQgdG8gYmUgYSBjb25zdCBxdWFsaWZpZWQKK0xWYWx1ZSBhbmQgYW4gUlZhbHVlLiAKKworVGhhdCdzIGFzIGNsb3NlIGFzIHdlIGNhbiBnZXQgdG8gYSBnZW5lcmljIGZvcndhcmRpbmcgZnVuY3Rpb24gYGdgIGFzCitkZXNjcmliZWQgYWJvdmUgYnkgdGhlIG1lYW5zIG9mIEMrKyA5OC4gU2VlIF9fdGhlX2ZvcndhcmRpbmdfcHJvYmxlbV9fIGZvciBhCit2ZXJ5IGRldGFpbGVkIGRpc2N1c3Npb24gaW5jbHVkaW5nIHNvbHV0aW9ucyB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgY2hhbmdlcy4KKworTm93LCBmb3IgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGl0LCB3ZSBuZWVkIDJeTiBvdmVybG9hZHMgZm9yIE4gcGFyYW1ldGVycworKGVhY2ggd2l0aCBhbmQgd2l0aG91dCBjb25zdCBxdWFsaWZpZXIpIGZvciBlYWNoIG51bWJlciBvZiBhcmd1bWVudHMgCisodGhhdCBpcyAyXihObWF4KzEpIC0gMl5ObWluKS4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNvbXBpbGUtdGltZSBjb21wbGV4aXR5IAoraXMgTygyXk4pLCBob3dldmVyIHRoZSBmYWN0b3IgaXMgbG93IHNvIGl0IHdvcmtzIHF1aXRlIHdlbGwgZm9yIGEgcmVhc29uYWJsZQorbnVtYmVyICg8IDEwKSBvZiBhcmd1bWVudHMuCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbjpyZWZlcmVuY2UgUmVmZXJlbmNlXQorCitbc2VjdGlvbiBmb3J3YXJkX2FkYXB0ZXJdCisKK1toZWFkaW5nIERlc2NyaXB0aW9uXQorCitGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlIGFuZAorUlZhbHVlIGFyZ3VtZW50cy4gUlZhbHVlIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAorTFZhbHVlcy4KKworQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LgorSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCAKK3RlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0gYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4KK1NwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYworbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKworX19ib29zdF9yZXN1bHRfb2ZfXyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsCitleHByZXNzaW9ucy4KKworW2hlYWRpbmcgSGVhZGVyXQorICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZvcndhcmRfYWRhcHRlci5ocHA+CisKK1toZWFkaW5nIFN5bm9wc2lzXQorCisgICAgbmFtZXNwYWNlIGJvb3N0CisgICAgeworICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgRnVuY3Rpb24sCisgICAgICAgICAgICBpbnQgQXJpdHlfT3JfTWluQXJpdHkgPSBfX3Vuc3BlY2lmaWVkX18sIGludCBNYXhBcml0eSA9IF9fdW5zcGVjaWZpZWRfXyA+CisgICAgICAgIGNsYXNzIGZvcndhcmRfYWRhcHRlcjsKKyAgICB9CisKK1t2YXJpYWJsZWxpc3QgTm90YXRpb24KKyAgICBbW2BGYF0gICAgICAgICAgICBbYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZl1dCisgICAgW1tgZmBdICAgICAgICAgICAgW2FuIG9iamVjdCBjb252ZXJ0aWJsZSB0byBgRmBdXQorICAgIFtbYEZBYF0gICAgICAgICAgIFt0aGUgdHlwZSBgZm9yd2FyZF9hZGFwdGVyPEY+YF1dCisgICAgW1tgZmFgXSAgICAgICAgICAgW2FuIGluc3RhbmNlIG9iamVjdCBvZiBgRkFgLCBpbml0aWFsaXplZCB3aXRoIGBmYF1dCisgICAgW1tgYTBgLi4uYGFOYF0gICAgW2FyZ3VtZW50cyB0byBgZmFgXV0KK10KKworVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQorCisgIF9fYm9vc3RfX3Jlc3VsdF9vZl9fPEYqKFRBMCBbY29uc3RdJi4uLlRBTiBbY29uc3RdJl0pPjo6dHlwZQorCit3aGVyZSBgVEEwYC4uLmBUQU5gIGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgYGEwYC4uLmBhTmAuCisKK1toZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQorCitbdGFibGUKKyAgICBbW0V4cHJlc3Npb25dICAgICAgW1NlbWFudGljc11dCisgICAgW1tgRkEoZilgXSAgICAgICAgIFtjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCBgZmAuXV0KKyAgICBbW2BGQSgpYF0gICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIGBGYCdzIGRlZmF1bHQgY29uc3RydWN0b3IuXV0KKyAgICBbW2BmYShhMGAuLi5gYU4pYF0gW2NhbGxzIGBmYCB3aXRoIHdpdGggYXJndW1lbnRzIGBhMGAuLi5gYU5gLl1dCitdCisKK1toZWFkaW5nIExpbWl0c10KKworVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfRk9SV0FSRF9BREFQVEVSX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQgdGhlCittYXhpbXVtIGNhbGwgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDYuCisKK1toZWFkaW5nIENvbXBsZXhpdHldCisKK1ByZXByb2Nlc3NpbmcgdGltZTogTygyXk4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4KK0NvbXBpbGUgdGltZTogTygyXk4pLCB3aGVyZSBOIGRlcGVuZHMgb24gdGhlIGFyaXR5IHJhbmdlLgorUnVuIHRpbWU6IE8oMCkgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMsIE8oMSkgb3RoZXJ3aXNlLgorCitbZW5kc2VjdF0KKworCitbc2VjdGlvbiBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXJdCisKK1toZWFkaW5nIERlc2NyaXB0aW9uXQorCitGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlIGFuZAorUlZhbHVlIGFyZ3VtZW50cy4gQWxsIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAorTFZhbHVlcywgZXhjZXB0IGZvciByZWZlcmVuY2Ugd3JhcHBlcnMgd2hpY2ggYXJlIHVud3JhcHBlZCBhbmQgbWF5IHlpZWxkCitub24tY29uc3QgTFZhbHVlcy4KKworQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LgorSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCAKK3RlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0gYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4KK1NwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYworbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKworX19ib29zdF9yZXN1bHRfb2ZfXyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsCitleHByZXNzaW9ucy4KKworW2hlYWRpbmcgSGVhZGVyXQorICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5ocHA+CisKK1toZWFkaW5nIFN5bm9wc2lzXQorCisgICAgbmFtZXNwYWNlIGJvb3N0CisgICAgeworICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgRnVuY3Rpb24sCisgICAgICAgICAgICBpbnQgQXJpdHlfT3JfTWluQXJpdHkgPSBfX3Vuc3BlY2lmaWVkX18sIGludCBNYXhBcml0eSA9IF9fdW5zcGVjaWZpZWRfXyA+CisgICAgICAgIHN0cnVjdCBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI7CisgICAgfQorCitbdmFyaWFibGVsaXN0IE5vdGF0aW9uCisgICAgW1tgRmBdICAgICAgICAgW2EgcG9zc2libHkgY29uc3QgcXVhbGlmaWVkIGZ1bmN0aW9uIG9iamVjdCB0eXBlIG9yIHJlZmVyZW5jZSB0eXBlIHRoZXJlb2ZdXQorICAgIFtbYGZgXSAgICAgICAgIFthbiBvYmplY3QgY29udmVydGlibGUgdG8gYEZgXV0KKyAgICBbW2BGQWBdICAgICAgICBbdGhlIHR5cGUgYGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjxGPmBdXQorICAgIFtbYGZhYF0gICAgICAgIFthbiBpbnN0YW5jZSBvZiBgRkFgLCBpbml0aWFsaXplZCB3aXRoIGBmYF1dCisgICAgW1tgYTBgLi4uYGFOYF0gW2FyZ3VtZW50cyB0byBgZmFgXV0KK10KKworVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQorCisgIF9fYm9vc3RfX3Jlc3VsdF9vZl9fPEYqKFRBMCBbY29uc3RdJi4uLlRBTiBbY29uc3RdJl0pPjo6dHlwZQorCit3aGVyZSBgVEEwYC4uLmBUQU5gIGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgYGEwYC4uLmBhTmAuCisKK1toZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQorCitbdGFibGUKKyAgICBbW0V4cHJlc3Npb25dICAgICAgW1NlbWFudGljc11dCisgICAgW1tgRkEoZilgXSAgICAgICAgIFtjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCBgZmAuXV0KKyAgICBbW2BGQSgpYF0gICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIGBGYCdzIGRlZmF1bHQgY29uc3RydWN0b3IuXV0KKyAgICBbW2BmYShhMGAuLi5gYU4pYF0gW2NhbGxzIGBmYCB3aXRoIHdpdGggY29uc3QgYXJndW1lbnRzIGBhMGAuLi5gYU5gLiBJZiBgYUlgIGlzIGEgCisgICAgICByZWZlcmVuY2Ugd3JhcHBlciBpdCBpcyB1bndyYXBwZWQuXV0KK10KKworW2hlYWRpbmcgTGltaXRzXQorCitUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9MSUdIVFdFSUdIVF9GT1JXQVJEX0FEQVBURVJfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkCit0byBzZXQgdGhlIG1heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisKK1toZWFkaW5nIENvbXBsZXhpdHldCisKK1ByZXByb2Nlc3NpbmcgdGltZTogTyhOKSwgd2hlcmUgTiBpcyB0aGUgYXJpdHkgbGltaXQuCitDb21waWxlIHRpbWU6IE8oTiksIHdoZXJlIE4gaXMgdGhlIGVmZmVjdGl2ZSBhcml0eSBvZiBhIGNhbGwuCitSdW4gdGltZTogTygwKSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcywgTygxKSBvdGhlcndpc2UuCisKK1tlbmRzZWN0XQorCitbZW5kc2VjdF0KKworCitbc2VjdGlvbiBBY2tub3dsZWRnZW1lbnRzXQorCitBcyB0aGVzZSB1dGlsaXRpZXMgYXJlIGZhY3RvcmVkIG91dCBvZiB0aGUgX19ib29zdF9mdXNpb25fXyBmdW5jdGlvbmFsIG1vZHVsZSwgCitJIHdhbnQgdG8gdGhhbmsgRGFuIE1hcnNkZW4gYW5kIEpvZWwgZGUgR3V6bWFuIGZvciBsZXR0aW5nIG1lIHBhcnRpY2lwYXRlIGluIHRoZQorZGV2ZWxvcG1lbnQgb2YgdGhhdCBncmVhdCBsaWJyYXJ5IGluIHRoZSBmaXJzdCBwbGFjZS4KKworRnVydGhlciwgSSB3YW50IHRvIGNyZWRpdCB0aGUgYXV0aG9ycyBvZiB0aGUgcmVmZXJlbmNlcyBiZWxvdywgZm9yIHRoZWlyCitpbi1kZXB0aCBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaGVyZS4KKworTGFzdCBidXQgbm90IGxlYXN0IEkgd2FudCB0byB0aGFuayBWZXNhIEthcm5vdmVuIGFuZCBQYXVsIE1lbnNvbmlkZXMgZm9yIHRoZQorQm9vc3QgUHJlcHJvY2Vzc29yIGxpYnJhcnkuIFdpdGhvdXQgaXQsIEkgd291bGQgaGF2ZSBlbmRlZCB1cCB3aXRoIGFuIGV4dGVybmFsCitjb2RlIGdlbmVyYXRvciBmb3IgdGhpcyBvbmUuCisKK1tlbmRzZWN0XQorCisKK1tzZWN0aW9uIFJlZmVyZW5jZXNdCisKKyMgW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDAyL24xMzg1Lmh0bSBUaGUgRm9yd2FyZGluZyBQcm9ibGVtXSwKKyAgUGV0ZXIgRGltb3YsIEhvd2FyZCBFLiBIaW5uYW50LCBEYXZpZCBBYnJhaGFtcywgMjAwMgorCisjIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiBCb29zdC5SZXN1bHRPZl0sCisgIERvdWdsYXMgR3JlZ29yLCAyMDA0CisKKyMgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9yZWYuaHRtbCBCb29zdC5SZWZdLCAKKyAgSmFha2tvIEphcnZpLCBQZXRlciBEaW1vdiwgRG91Z2xhcyBHcmVnb3IsIERhdmlkIEFicmFoYW1zLCAxOTk5LTIwMDIKKworW2VuZHNlY3RdCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDUyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNTcxIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZCAxLjA8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzguMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZvcndhcmQgMS4wIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImNoYXB0ZXIiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PgorPGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZCI+PC9hPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZCAxLjA8L2gyPjwvZGl2PgorPGRpdj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj4KKzxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPlRvYmlhczwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPlNjaHdpbmdlcjwvc3Bhbj4KKzwvaDM+PC9kaXY+PC9kaXY+Cis8ZGl2PjxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCAmIzE2OTsgMjAwNywgMjAwOCBUb2JpYXMgU2Nod2luZ2VyPC9wPjwvZGl2PgorPGRpdj48ZGl2IGNsYXNzPSJsZWdhbG5vdGljZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQubGVnYWwiPjwvYT48cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC9kaXY+Cis8L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+Cis8cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Cis8ZGwgY2xhc3M9InRvYyI+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJyaWVmX2Rlc2NyaXB0aW9uIj5CcmllZiBEZXNjcmlwdGlvbjwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZCI+QmFja2dyb3VuZDwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlIj5SZWZlcmVuY2U8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmFja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYnJpZWZfZGVzY3JpcHRpb24iPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYnJpZWZfZGVzY3JpcHRpb24iIHRpdGxlPSJCcmllZiBEZXNjcmlwdGlvbiI+QnJpZWYgRGVzY3JpcHRpb248L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48L2NvZGU+IHByb3ZpZGVzIGEgcmV1c2FibGUgYWRhcHRlcgorICAgICAgdGVtcGxhdGUgZm9yIGZ1bmN0aW9uIG9iamVjdHMuIEl0IGZvcndhcmRzIFJWYWx1ZXMgYXMgcmVmZXJlbmNlcyB0byBjb25zdCwKKyAgICAgIHdoaWxlIGxlYXZpbmcgTFZhbHVlcyBhcy1pcy4KKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmdW5jdGlvbiBvYmplY3QgdGhhdCBvbmx5IGFjY2VwdCBMVmFsdWVzPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKSg8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQwPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50MDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50Mjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBBZGFwdGVkIHZlcnNpb24gYWxzbyBhY2NlcHRzIFJWYWx1ZXMgYW5kIGZvcndhcmRzPC9zcGFuPgorPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHRoZW0gYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgTFZhbHVlcyBhcy1pczwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIEFub3RoZXIgYWRhcHRlciwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5saWdod2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48L2NvZGU+IGFsbG93cyBmb3J3YXJkaW5nCisgICAgICB3aXRoIHNvbWUgaGVscCBmcm9tIHRoZSB1c2VyIGFjY2VwdGluZyBhbmQgdW53cmFwcGluZyByZWZlcmVuY2Ugd3JhcHBlcnMgKHNlZQorICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVmPC9hPikgZm9yCisgICAgICByZWZlcmVuY2UgYXJndW1lbnRzLCBjb25zdCBxdWFsaWZ5aW5nIGFsbCBvdGhlciBhcmd1bWVudHMuCisgICAgPC9wPgorPHA+CisgICAgICBUaGUgdGFyZ2V0IGZ1bmN0aW9ucyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPiwKKyAgICAgIGFuZCBzbyBhcmUgdGhlIGFkYXB0ZXJzLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZCIgdGl0bGU9IkJhY2tncm91bmQiPkJhY2tncm91bmQ8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBMZXQncyBzdXBwb3NlIHdlIGhhdmUgc29tZSBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4KKyAgICAgIHRoYXQgd2UgY2FuIGNhbGwgbGlrZSB0aGlzOgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfdmFyaWFibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIE5vdyB3ZSB3YW50IHRvIHdyaXRlIGFub3RoZXIsIGdlbmVyaWMgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zzwvc3Bhbj48L2NvZGU+CisgICAgICB0aGF0IGNhbiBiZSBjYWxsZWQgdGhlIHNhbWUgd2F5IGFuZCByZXR1cm5zIHNvbWUgb2JqZWN0IHRoYXQgY2FsbHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfdmFyaWFibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX3ZhcmlhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pLjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y2FsbF9mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4KKzwvcHJlPgorPGg0PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQuaDAiPjwvYT4KKyAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLndoeV93b3VsZF93ZV93YW50X3RvX2RvX2l0X19hbnl3YXlfIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLndoeV93b3VsZF93ZV93YW50X3RvX2RvX2l0X19hbnl3YXlfIj5XaHkKKyAgICAgIHdvdWxkIHdlIHdhbnQgdG8gZG8gaXQsIGFueXdheT88L2E+CisgICAgPC9oND4KKzxwPgorICAgICAgTWF5YmUgd2Ugd2FudCB0byBydW4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IHNldmVyYWwKKyAgICAgIHRpbWVzLiBPciBtYXliZSB3ZSB3YW50IHRvIHJ1biBpdCB3aXRoaW4gYW5vdGhlciB0aHJlYWQuIE1heWJlIHdlIGp1c3Qgd2FudAorICAgICAgdG8gZW5jYXBzdWxhdGUgdGhlIGNhbGwgZXhwcmVzc2lvbiBmb3Igbm93LCBhbmQgdGhlbiB1c2UgaXQgd2l0aCBvdGhlciBjb2RlCisgICAgICB0aGF0IGFsbG93cyB0byBjb21wb3NlIG1vcmUgY29tcGxleCBleHByZXNzaW9ucyBpbiBvcmRlciB0byBkZWNvbXBvc2UgaXQgd2l0aAorICAgICAgQysrIHRlbXBsYXRlcyBhbmQgaGF2ZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgc29tZSBtYWNoaW5lcnkgdGhhdCBldmVudHVhbGx5CisgICAgICBjYWxscyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gYXQgcnVudGltZSAoaW4gb3RoZXIKKyAgICAgIHdvcmRzOyBhcHBseSBhIHRlY2huaXF1ZSB0aGF0IGlzIGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzIEV4cHJlc3Npb24gVGVtcGxhdGVzKS4KKyAgICA8L3A+Cis8aDQ+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC5oMSI+PC9hPgorICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQubm93X19ob3dfZG9fd2VfZG9faXRfIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLm5vd19faG93X2RvX3dlX2RvX2l0XyI+Tm93LCBob3cKKyAgICAgIGRvIHdlIGRvIGl0PzwvYT4KKyAgICA8L2g0PgorPHA+CisgICAgICBUaGUgYmFkIG5ld3MgaXM6IEl0J3MgaW1wb3NzaWJsZS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoYXQgaXMgc28gYmVjYXVzZSB0aGVyZSBpcyBhIHNsaWdodCBkaWZmZXJlbmNlIGJldHdlZW4gYSB2YXJpYWJsZSBhbmQgYW4gZXhwcmVzc2lvbgorICAgICAgdGhhdCBldmFsdWF0ZXMgdG8gaXRzIHZhbHVlOiBHaXZlbgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIGFuZAorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICB3ZSBjYW4gY2FsbAorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIG5vbi1jb25zdCBvYmplY3Q8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdDwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICB3aGVyZQorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmYWlscyB0byBjb21waWxlLjwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBUaGlzIHdheSB3ZSBjYW4gc2FmZWx5IGhhdmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PC9jb2RlPgorICAgICAgc3RvcmUgaXRzIHJlZmVyZW5jZSBhcmd1bWVudCBhbmQgdGhlIGNvbXBpbGVyIGtlZXBzIHVzIGZyb20gc3RvcmluZyBhIHJlZmVyZW5jZQorICAgICAgdG8gYW4gb2JqZWN0IHdpdGggdGVtcG9yYXJ5IGxpZmV0aW1lLgorICAgIDwvcD4KKzxwPgorICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBub24tY29uc3RuZXNzIGFuZCB3aGV0aGVyIGFuIG9iamVjdCBiaW5kcyB0bworICAgICAgYSBub24tY29uc3QgcmVmZXJlbmNlIHBhcmFtZXRlciBhcmUgdHdvIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBUaGUgbGF0dGVyIGlzCisgICAgICB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBMVmFsdWVzIGFuZCBSVmFsdWVzLiBUaGUgbmFtZXMgc3RlbSBmcm9tIHRoZSBsZWZ0IGhhbmQKKyAgICAgIHNpZGUgYW5kIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBleHByZXNzaW9ucywgdGh1cyBMVmFsdWVzIGFyZSB0eXBpY2FsbHkKKyAgICAgIHRoZSBvbmVzIHlvdSBjYW4gYXNzaWduIHRvLCBhbmQgUlZhbHVlcyB0aGUgdGVtcG9yYXJ5IHJlc3VsdHMgZnJvbSB0aGUgcmlnaHQKKyAgICAgIGhhbmQgc2lkZSBleHByZXNzaW9uLgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPis8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Mjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gICAgICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBhIGlzIExWYWx1ZSwgMSsyIGlzIHRoZSBleHByZXNzaW9uIHByb2R1Y2luZyB0aGUgUlZhbHVlLDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyAxKzIgPSBhOyAgICAgLy8gdXN1YWxseSBtYWtlcyBubyBzZW5zZS4gPC9zcGFuPgorCis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gd29ya3MsIGJlY2F1c2UgeSBpcyBhbiBMVmFsdWU8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZnVuYzEoMSsyKTsgIC8vIGZhaWxzIHRvIGNvbXBpbGUsIGJlY2F1c2Ugd2Ugb25seSBnb3QgYW4gUlZhbHVlLjwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBJZiB3ZSBhZGQgY29uc3QgcXVhbGlmaWNhdGlvbiBvbiB0aGUgcGFyYW1ldGVyLCBvdXIgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIFJWYWx1ZXM6CisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXSBmdW5jdGlvbiBzY29wZTo8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3QgdGVtcG9yYXJ5LCBvYmplY3QsPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QsIHdoaWxlIHkgaXMgbm90IGNvbnN0LCBhbmQ8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCwganVzdCBsaWtlIHouPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIEluIGFsbCBjYXNlcywgdGhlIGFyZ3VtZW50IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PC9jb2RlPgorICAgICAgaW4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PC9jb2RlPiBpcyBhIGNvbnN0LXF1YWxpZmllZAorICAgICAgTFZhbHVlLiBXZSBjYW4gdXNlIGZ1bmN0aW9uIG92ZXJsb2FkaW5nIHRvIGlkZW50aWZ5IG5vbi1jb25zdCBMVmFsdWVzOgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gIzE8L3NwYW4+Cis8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vICMyPC9zcGFuPgorCis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0LCB0ZW1wb3Jhcnkgb2JqZWN0IGluICMxLDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLWNvbnN0IG9iamVjdCBpbiAjMiwgYW5kPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj56PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QgaW4gIzEuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIE5vdGUgdGhhdCBhbGwgYXJndW1lbnRzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PC9jb2RlPiBpbgorICAgICAgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PC9jb2RlPgorICAgICAgYXJlIExWYWx1ZXMuIEluIGZhY3QsIHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc3BvcnQgUlZhbHVlcyBpbnRvIGEgZnVuY3Rpb24KKyAgICAgIGFzLWlzIGluIEMrKzk4LiBBbHNvIG5vdGUgdGhhdCB3ZSBjYW4ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHdoYXQgdXNlZCB0byBiZQorICAgICAgYSBjb25zdCBxdWFsaWZpZWQgTFZhbHVlIGFuZCBhbiBSVmFsdWUuCisgICAgPC9wPgorPHA+CisgICAgICBUaGF0J3MgYXMgY2xvc2UgYXMgd2UgY2FuIGdldCB0byBhIGdlbmVyaWMgZm9yd2FyZGluZyBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nPC9zcGFuPjwvY29kZT4gYXMgZGVzY3JpYmVkIGFib3ZlIGJ5IHRoZSBtZWFucyBvZiBDKysKKyAgICAgIDk4LiBTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0iIHRhcmdldD0iX3RvcCI+VGhlCisgICAgICBGb3J3YXJkaW5nIFByb2JsZW08L2E+IGZvciBhIHZlcnkgZGV0YWlsZWQgZGlzY3Vzc2lvbiBpbmNsdWRpbmcgc29sdXRpb25zCisgICAgICB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgY2hhbmdlcy4KKyAgICA8L3A+Cis8cD4KKyAgICAgIE5vdywgZm9yIGFjdHVhbGx5IGltcGxlbWVudGluZyBpdCwgd2UgbmVlZCAyXk4gb3ZlcmxvYWRzIGZvciBOIHBhcmFtZXRlcnMgKGVhY2gKKyAgICAgIHdpdGggYW5kIHdpdGhvdXQgY29uc3QgcXVhbGlmaWVyKSBmb3IgZWFjaCBudW1iZXIgb2YgYXJndW1lbnRzICh0aGF0IGlzIDJeKE5tYXgrMSkKKyAgICAgIC0gMl5ObWluKS4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNvbXBpbGUtdGltZSBjb21wbGV4aXR5IGlzIE8oMl5OKSwgaG93ZXZlcgorICAgICAgdGhlIGZhY3RvciBpcyBsb3cgc28gaXQgd29ya3MgcXVpdGUgd2VsbCBmb3IgYSByZWFzb25hYmxlIG51bWJlciAoJmx0OyAxMCkKKyAgICAgIG9mIGFyZ3VtZW50cy4KKyAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlIiB0aXRsZT0iUmVmZXJlbmNlIj5SZWZlcmVuY2U8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIiPmZvcndhcmRfYWRhcHRlcjwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9hPjwvc3Bhbj48L2R0PgorPC9kbD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlciI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyIiB0aXRsZT0iZm9yd2FyZF9hZGFwdGVyIj5mb3J3YXJkX2FkYXB0ZXI8L2E+Cis8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDAiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuZGVzY3JpcHRpb24iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuZGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uPC9hPgorICAgICAgPC9oNT4KKzxwPgorICAgICAgICBGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlCisgICAgICAgIGFuZCBSVmFsdWUgYXJndW1lbnRzLiBSVmFsdWUgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgYXMgcmVmZXJlbmNlLXRvLWNvbnN0CisgICAgICAgIHR5cGVkIExWYWx1ZXMuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorICAgICAgICBmb3J3YXJkaW5nIHRvIGEgc3BlY2lmaWMgYXJpdHkuIElmIGEgdGhpcmQsIG51bWVyaWMgbm9uLXR5cGUgdGVtcGxhdGUgYXJndW1lbnQKKyAgICAgICAgaXMgcHJlc2VudCwgdGhlIHNlY29uZCBhbmQgdGhpcmQgdGVtcGxhdGUgYXJndW1lbnQgYXJlIHRyZWF0ZWQgYXMgbWluaW11bQorICAgICAgICBhbmQgbWF4aW11bSBhcml0eSwgcmVzcGVjdGl2ZWx5LiBTcGVjaWZ5aW5nIGFuIGFyaXR5IGNhbiBiZSBoZWxwZnVsIHRvIGltcHJvdmUKKyAgICAgICAgdGhlIHJlYWRhYmlsaXR5IG9mIGRpYWdub3N0aWMgbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPgorICAgICAgICBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsIGV4cHJlc3Npb25zLgorICAgICAgPC9wPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDEiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaGVhZGVyIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmhlYWRlciI+SGVhZGVyPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icHJlcHJvY2Vzc29yIj4jaW5jbHVkZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmhwcDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzwvcHJlPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDIiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuc3lub3BzaXMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuc3lub3BzaXMiPlN5bm9wc2lzPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+QXJpdHlfT3JfTWluQXJpdHk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bnNwZWNpZmllZDwvZW0+PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+TWF4QXJpdHk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bnNwZWNpZmllZDwvZW0+PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzwvcHJlPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+Tm90YXRpb248L2I+PC9wPgorPGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBvYmplY3QgY29udmVydGlibGUgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjwvY29kZT4sCisgICAgICAgICAgICAgIGluaXRpYWxpemVkIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYXJndW1lbnRzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPC9kbD4KKzwvZGl2PgorPHA+CisgICAgICAgIFRoZSByZXN1bHQgdHlwZSBvZiBhIHRhcmdldCBmdW5jdGlvbiBpbnZvY2F0aW9uIG11c3QgYmUKKyAgICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X29mPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiooPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XSZhbXA7Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQU48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XSZhbXA7XSkmZ3Q7Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnR5cGU8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgICB3aGVyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBTjwvc3Bhbj48L2NvZGU+IGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4uCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oMyI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5leHByZXNzaW9uX3NlbWFudGljcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5leHByZXNzaW9uX3NlbWFudGljcyI+RXhwcmVzc2lvbgorICAgICAgICBTZW1hbnRpY3M8L2E+CisgICAgICA8L2g1PgorPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJ0YWJsZSI+Cis8Y29sZ3JvdXA+Cis8Y29sPgorPGNvbD4KKzwvY29sZ3JvdXA+Cis8dGhlYWQ+PHRyPgorPHRoPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90aD4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIFNlbWFudGljcworICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90aD4KKzwvdHI+PC90aGVhZD4KKzx0Ym9keT4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhZGFwdGVyLCBhdHRlbXB0cyB0byB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+J3MKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPiB3aXRoIHdpdGgKKyAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oNCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5saW1pdHMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIubGltaXRzIj5MaW1pdHM8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFRoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX0ZPUldBUkRfQURBUFRFUl9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQgdG8gc2V0CisgICAgICAgIHRoZSBtYXhpbXVtIGNhbGwgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDYuCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oNSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5jb21wbGV4aXR5Ij48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmNvbXBsZXhpdHkiPkNvbXBsZXhpdHk8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFByZXByb2Nlc3NpbmcgdGltZTogTygyXk4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4gQ29tcGlsZSB0aW1lOiBPKDJeTiksCisgICAgICAgIHdoZXJlIE4gZGVwZW5kcyBvbiB0aGUgYXJpdHkgcmFuZ2UuIFJ1biB0aW1lOiBPKDApIGlmIHRoZSBjb21waWxlciBpbmxpbmVzLAorICAgICAgICBPKDEpIG90aGVyd2lzZS4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIiIHRpdGxlPSJsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvYT4KKzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oMCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5kZXNjcmlwdGlvbiI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5kZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIEZ1bmN0aW9uIG9iamVjdCBhZGFwdGVyIHRlbXBsYXRlIHdob3NlIGluc3RhbmNlcyBhcmUgY2FsbGFibGUgd2l0aCBMVmFsdWUKKyAgICAgICAgYW5kIFJWYWx1ZSBhcmd1bWVudHMuIEFsbCBhcmd1bWVudHMgYXJlIGZvcndhcmRlZCBhcyByZWZlcmVuY2UtdG8tY29uc3QgdHlwZWQKKyAgICAgICAgTFZhbHVlcywgZXhjZXB0IGZvciByZWZlcmVuY2Ugd3JhcHBlcnMgd2hpY2ggYXJlIHVud3JhcHBlZCBhbmQgbWF5IHlpZWxkCisgICAgICAgIG5vbi1jb25zdCBMVmFsdWVzLgorICAgICAgPC9wPgorPHA+CisgICAgICAgIEFuIGFyaXR5IGNhbiBiZSBnaXZlbiBhcyBzZWNvbmQsIG51bWVyaWMgbm9uLXR5cGUgdGVtcGxhdGUgYXJndW1lbnQgdG8gcmVzdHJpY3QKKyAgICAgICAgZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LiBJZiBhIHRoaXJkLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50CisgICAgICAgIGlzIHByZXNlbnQsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIHRlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0KKyAgICAgICAgYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4gU3BlY2lmeWluZyBhbiBhcml0eSBjYW4gYmUgaGVscGZ1bCB0byBpbXByb3ZlCisgICAgICAgIHRoZSByZWFkYWJpbGl0eSBvZiBkaWFnbm9zdGljIG1lc3NhZ2VzIGFuZCBjb21waWxlIHRpbWUgcGVyZm9ybWFuY2UuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZXN1bHRPZjwvYT4KKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZXN1bHQgdHlwZXMgb2Ygc3BlY2lmaWMgY2FsbCBleHByZXNzaW9ucy4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmgxIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmhlYWRlciI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oZWFkZXIiPkhlYWRlcjwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InByZXByb2Nlc3NvciI+I2luY2x1ZGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ocHA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Cis8L3ByZT4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmgyIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLnN5bm9wc2lzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLnN5bm9wc2lzIj5TeW5vcHNpczwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkFyaXR5X09yX01pbkFyaXR5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5zcGVjaWZpZWQ8L2VtPjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPk1heEFyaXR5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5zcGVjaWZpZWQ8L2VtPjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3RhdGlvbjwvYj48L3A+Cis8ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhIHBvc3NpYmx5IGNvbnN0IHF1YWxpZmllZCBmdW5jdGlvbiBvYmplY3QgdHlwZSBvciByZWZlcmVuY2UgdHlwZSB0aGVyZW9mCisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIG9iamVjdCBjb252ZXJ0aWJsZSB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48L2NvZGU+LAorICAgICAgICAgICAgICBpbml0aWFsaXplZCB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFyZ3VtZW50cyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxwPgorICAgICAgICBUaGUgcmVzdWx0IHR5cGUgb2YgYSB0YXJnZXQgZnVuY3Rpb24gaW52b2NhdGlvbiBtdXN0IGJlCisgICAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF9vZjwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qKDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEEwPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl0mYW1wOy4uLjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEFOPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl0mYW1wO10pJmd0Ozo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50eXBlPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgICAgd2hlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQU48L3NwYW4+PC9jb2RlPiBkZW5vdGUgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+LgorICAgICAgPC9wPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDMiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPkV4cHJlc3Npb24KKyAgICAgICAgU2VtYW50aWNzPC9hPgorICAgICAgPC9oNT4KKzxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0idGFibGUiPgorPGNvbGdyb3VwPgorPGNvbD4KKzxjb2w+Cis8L2NvbGdyb3VwPgorPHRoZWFkPjx0cj4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBTZW1hbnRpY3MKKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8L3RyPjwvdGhlYWQ+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhZGFwdGVyLCBpbml0aWFsaXplcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPidzCisgICAgICAgICAgICAgICAgICBkZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjYWxscyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gd2l0aCB3aXRoCisgICAgICAgICAgICAgICAgICBjb25zdCBhcmd1bWVudHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4uIElmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFJPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIGlzIGEgcmVmZXJlbmNlIHdyYXBwZXIgaXQgaXMgdW53cmFwcGVkLgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmg0Ij48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmxpbWl0cyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5saW1pdHMiPkxpbWl0czwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfTElHSFRXRUlHSFRfRk9SV0FSRF9BREFQVEVSX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZAorICAgICAgICB0byBzZXQgdGhlIG1heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oNSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jb21wbGV4aXR5Ij48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNvbXBsZXhpdHkiPkNvbXBsZXhpdHk8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFByZXByb2Nlc3NpbmcgdGltZTogTyhOKSwgd2hlcmUgTiBpcyB0aGUgYXJpdHkgbGltaXQuIENvbXBpbGUgdGltZTogTyhOKSwKKyAgICAgICAgd2hlcmUgTiBpcyB0aGUgZWZmZWN0aXZlIGFyaXR5IG9mIGEgY2FsbC4gUnVuIHRpbWU6IE8oMCkgaWYgdGhlIGNvbXBpbGVyCisgICAgICAgIGlubGluZXMsIE8oMSkgb3RoZXJ3aXNlLgorICAgICAgPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5hY2tub3dsZWRnZW1lbnRzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmFja25vd2xlZGdlbWVudHMiIHRpdGxlPSJBY2tub3dsZWRnZW1lbnRzIj5BY2tub3dsZWRnZW1lbnRzPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgQXMgdGhlc2UgdXRpbGl0aWVzIGFyZSBmYWN0b3JlZCBvdXQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVzaW9uL2RvYy9odG1sL2luZGV4Lmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuRnVzaW9uPC9hPgorICAgICAgZnVuY3Rpb25hbCBtb2R1bGUsIEkgd2FudCB0byB0aGFuayBEYW4gTWFyc2RlbiBhbmQgSm9lbCBkZSBHdXptYW4gZm9yIGxldHRpbmcKKyAgICAgIG1lIHBhcnRpY2lwYXRlIGluIHRoZSBkZXZlbG9wbWVudCBvZiB0aGF0IGdyZWF0IGxpYnJhcnkgaW4gdGhlIGZpcnN0IHBsYWNlLgorICAgIDwvcD4KKzxwPgorICAgICAgRnVydGhlciwgSSB3YW50IHRvIGNyZWRpdCB0aGUgYXV0aG9ycyBvZiB0aGUgcmVmZXJlbmNlcyBiZWxvdywgZm9yIHRoZWlyIGluLWRlcHRoCisgICAgICBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaGVyZS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIExhc3QgYnV0IG5vdCBsZWFzdCBJIHdhbnQgdG8gdGhhbmsgVmVzYSBLYXJub3ZlbiBhbmQgUGF1bCBNZW5zb25pZGVzIGZvciB0aGUKKyAgICAgIEJvb3N0IFByZXByb2Nlc3NvciBsaWJyYXJ5LiBXaXRob3V0IGl0LCBJIHdvdWxkIGhhdmUgZW5kZWQgdXAgd2l0aCBhbiBleHRlcm5hbAorICAgICAgY29kZSBnZW5lcmF0b3IgZm9yIHRoaXMgb25lLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZXMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlcyIgdGl0bGU9IlJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0iIHRhcmdldD0iX3RvcCI+VGhlCisgICAgICAgICAgRm9yd2FyZGluZyBQcm9ibGVtPC9hPiwgUGV0ZXIgRGltb3YsIEhvd2FyZCBFLiBIaW5uYW50LCBEYXZpZCBBYnJhaGFtcywKKyAgICAgICAgICAyMDAyCisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPiwKKyAgICAgICAgICBEb3VnbGFzIEdyZWdvciwgMjAwNAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVmPC9hPiwKKyAgICAgICAgICBKYWFra28gSmFydmksIFBldGVyIERpbW92LCBEb3VnbGFzIEdyZWdvciwgRGF2aWQgQWJyYWhhbXMsIDE5OTktMjAwMgorICAgICAgICA8L2xpPgorPC9vbD48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgYWxpZ249ImxlZnQiPjxwPjxzbWFsbD5MYXN0IHJldmlzZWQ6IE5vdmVtYmVyIDAxLCAyMDA4IGF0IDE5OjU4OjUwIEdNVDwvc21hbGw+PC9wPjwvdGQ+Cis8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj48L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhZjcxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdApAQCAtMCwwICsxIEBACitpbmRleC5odG1sCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODAzMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvaW5kZXguaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyBVUkw9ZG9jL2h0bWwvaW5kZXguaHRtbCI+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgY2xpY2sgdGhpcyAKKyAgICA8YSBocmVmPSJkb2MvaHRtbC9pbmRleC5odG1sIj5saW5rPC9hPiAmbmJzcDs8aHI+CisgICAgPHA+qSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlciwgMjAwOTwvcD4KKyAgICA8cD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgCisgICAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij4KKyAgICBMSUNFTlNFXzFfMC50eHQ8L2E+IG9yIGNvcHkgYXQKKyAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3A+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvSmFtZmlsZSBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTY5NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9KYW1maWxlCkBAIC0wLDAgKzEsMTcgQEAKKworIyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKKyMKKyMgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAorIyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi9cL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKworaW1wb3J0IHRlc3RpbmcgOworCitwcm9qZWN0IGZvcndhcmQtdGVzdHMKKyAgICA7CisKK3Rlc3Qtc3VpdGUgZnVuY3Rpb25hbC9mb3J3YXJkCisgICAgOgorICAgICAgWyBydW4gZm9yd2FyZF9hZGFwdGVyLmNwcCBdCisgICAgICBbIHJ1biBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuY3BwIF0KKyAgICA7CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvZm9yd2FyZF9hZGFwdGVyLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvZm9yd2FyZF9hZGFwdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNjNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9mb3J3YXJkX2FkYXB0ZXIuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKKyAgCisgICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKyAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKworI2lmZGVmIEJPT1NUX01TVkMKKyMgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KSAvLyBubyBjb252ZXJzaW9uIHdhcm5pbmdzLCBwbGVhc2UKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvZm9yd2FyZF9hZGFwdGVyLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgorCisjaW5jbHVkZSA8Ym9vc3QvYmxhbmsuaHBwPgorI2luY2x1ZGUgPGJvb3N0L25vbmNvcHlhYmxlLmhwcD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKwordGVtcGxhdGUgPGNsYXNzIEJhc2UgPSBuZG5ib29zdDo6Ymxhbms+CitjbGFzcyB0ZXN0X2Z1bmMgOiBwdWJsaWMgQmFzZSAKK3sKKyAgICBpbnQgdmFsOworcHVibGljOgorICAgIHRlc3RfZnVuYyhpbnQgdikgOiB2YWwodikgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBCPgorICAgIHRlc3RfZnVuYyh0ZXN0X2Z1bmM8Qj4gY29uc3QgJiB0aGF0KQorICAgICAgOiB2YWwodGhhdC52YWwpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBCPiBmcmllbmQgY2xhc3MgdGVzdF9mdW5jOworCisgICAgaW50IG9wZXJhdG9yKCkoaW50ICYgbCwgaW50IGNvbnN0ICYgcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsPXIrdmFsOworICAgIH0KKyAgICBsb25nIG9wZXJhdG9yKCkoaW50ICYgbCwgaW50IGNvbnN0ICYgcikgCisgICAgeworICAgICAgICByZXR1cm4gLShsPXIrdmFsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2lnPgorICAgIHN0cnVjdCByZXN1bHQKKyAgICB7CisgICAgICAgIHR5cGVkZWYgdm9pZCB0eXBlOworICAgIH07CisKKyAgICAvLyBlbnN1cmUgcmVzdWx0X29mIGFyZ3VtZW50IHR5cGVzIGFyZSB3aGF0J3MgZXhwZWN0ZWQKKyAgICAvLyBub3RlOiB0aGlzIGlzICpub3QqIGhvdyBjbGllbnQgY29kZSBzaG91bGQgbG9vayBsaWtlIAorICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYgY29uc3QoaW50JixpbnQgY29uc3QmKSA+IHsgdHlwZWRlZiBpbnQgdHlwZTsgfTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYoaW50JixpbnQgY29uc3QmKSA+IHsgdHlwZWRlZiBsb25nIHR5cGU7IH07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmKGludCYsaW50JikgPiB7IHR5cGVkZWYgY2hhciB0eXBlOyB9OworfTsKKworZW51bSB7IGludF8sIGxvbmdfLCBjaGFyXyB9OworCitpbnQgdHlwZV9vZihpbnQpICB7IHJldHVybiBpbnRfOyB9CitpbnQgdHlwZV9vZihsb25nKSB7IHJldHVybiBsb25nXzsgfQoraW50IHR5cGVfb2YoY2hhcikgeyByZXR1cm4gY2hhcl87IH0KKworaW50IG1haW4oKQoreworICAgIHsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OmlzX3NhbWU7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0OjpyZXN1bHRfb2Y7CisgICAgICAgIHR5cGVkZWYgbmRuYm9vc3Q6OmZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBmOworCisgICAgICAgIC8vIGx2YWx1ZSxydmFsdWUKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYoaW50JiwgaW50KSA+Ojp0eXBlLCBsb25nID46OnZhbHVlICkpOworICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZiBjb25zdCAoaW50JiwgaW50KSA+Ojp0eXBlLCBpbnQgPjo6dmFsdWUgKSk7CisgICAgICAgIC8vIGx2YWx1ZSxjb25zdCBsdmFsdWUKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYoaW50JiwgaW50IGNvbnN0ICYpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChpbnQmLCBpbnQgY29uc3QgJikgPjo6dHlwZSwgaW50ID46OnZhbHVlICkpOworICAgICAgICAvLyBsdmFsdWUsbHZhbHVlCisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmKGludCYsIGludCYpID46OnR5cGUsIGNoYXIgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChpbnQmLCBpbnQmKSA+Ojp0eXBlLCBjaGFyID46OnZhbHVlICkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6Om5vbmNvcHlhYmxlOworICAgICAgICB1c2luZyBuZG5ib29zdDo6Zm9yd2FyZF9hZGFwdGVyOworCisgICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiBmKDcpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gZnVuYyhmKTsKKyAgICAgICAgZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+ICYgPiBmdW5jX3JlZihmKTsKKyAgICAgICAgZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+ICYgPiBjb25zdCBmdW5jX3JlZl9jKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+IGNvbnN0ID4gZnVuY19jKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gY29uc3QgZnVuY19jMihmKTsKKyAgICAgICAgZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+IGNvbnN0ICYgPiBmdW5jX2NfcmVmKGYpOworCisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmMoeCwxKSApID09IGxvbmdfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfcmVmKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX3JlZl9jKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2MoeCwxKSApID09IGludF8gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jMih4LDEpICkgPT0gaW50XyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2NfcmVmKHgsMSkgKSA9PSBpbnRfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmMoeCx4KSApID09IGNoYXJfICk7CisKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuYyh4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfcmVmKHgsMSkgPT0gLTggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19yZWZfYyh4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfYyh4LDEpID09IDggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jMih4LDEpID09IDggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jX3JlZih4LDEpID09IDggKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcApAQCAtMCwwICsxLDEyOCBAQAorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIENvcHlyaWdodCAoYykgMjAwNyBUb2JpYXMgU2Nod2luZ2VyCisgIAorICAgIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCisgICAgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisKKyNpZmRlZiBCT09TVF9NU1ZDCisjICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkgLy8gbm8gY29udmVyc2lvbiB3YXJuaW5ncywgcGxlYXNlCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5ocHA+CisKKyNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L2JsYW5rLmhwcD4KKyNpbmNsdWRlIDxib29zdC9ub25jb3B5YWJsZS5ocHA+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK3RlbXBsYXRlIDxjbGFzcyBCYXNlID0gbmRuYm9vc3Q6OmJsYW5rPgorY2xhc3MgdGVzdF9mdW5jIDogcHVibGljIEJhc2UgCit7CisgICAgaW50IHZhbDsKK3B1YmxpYzoKKyAgICB0ZXN0X2Z1bmMoaW50IHYpIDogdmFsKHYpIHsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgQj4KKyAgICB0ZXN0X2Z1bmModGVzdF9mdW5jPEI+IGNvbnN0ICYgdGhhdCkKKyAgICAgIDogdmFsKHRoYXQudmFsKQorICAgIHsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgQj4gZnJpZW5kIGNsYXNzIHRlc3RfZnVuYzsKKworICAgIGludCBvcGVyYXRvcigpKGludCAmIGwsIGludCBjb25zdCAmIHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbD1yK3ZhbDsKKyAgICB9CisgICAgbG9uZyBvcGVyYXRvcigpKGludCAmIGwsIGludCBjb25zdCAmIHIpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIC0obD1yK3ZhbCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNpZz4KKyAgICBzdHJ1Y3QgcmVzdWx0CisgICAgeworICAgICAgICB0eXBlZGVmIHZvaWQgdHlwZTsKKyAgICB9OworCisgICAgLy8gZW5zdXJlIHJlc3VsdF9vZiBhcmd1bWVudCB0eXBlcyBhcmUgd2hhdCdzIGV4cGVjdGVkCisgICAgLy8gbm90ZTogdGhpcyBpcyAqbm90KiBob3cgY2xpZW50IGNvZGUgc2hvdWxkIGxvb2sgbGlrZSAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmIGNvbnN0KGludCYsaW50IGNvbnN0JikgPiB7IHR5cGVkZWYgaW50IHR5cGU7IH07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmKGludCYsaW50IGNvbnN0JikgPiB7IHR5cGVkZWYgbG9uZyB0eXBlOyB9OworCisgICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+CisgICAgc3RydWN0IHJlc3VsdDwgU2VsZihpbnQmLGludCYpID4geyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsKK307CisKK2VudW0geyBpbnRfLCBsb25nXywgY2hhcl8gfTsKKworaW50IHR5cGVfb2YoaW50KSAgeyByZXR1cm4gaW50XzsgfQoraW50IHR5cGVfb2YobG9uZykgeyByZXR1cm4gbG9uZ187IH0KK2ludCB0eXBlX29mKGNoYXIpIHsgcmV0dXJuIGNoYXJfOyB9CisKK2ludCBtYWluKCkKK3sKKyAgICB7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0Ojppc19zYW1lOworICAgICAgICB1c2luZyBuZG5ib29zdDo6cmVzdWx0X29mOworICAgICAgICB0eXBlZGVmIG5kbmJvb3N0OjpsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gZjsKKyAgICAgICAgdHlwZWRlZiBuZG5ib29zdDo6cmVmZXJlbmNlX3dyYXBwZXI8aW50PiByZWY7CisgICAgICAgIHR5cGVkZWYgbmRuYm9vc3Q6OnJlZmVyZW5jZV93cmFwcGVyPGludCBjb25zdD4gY3JlZjsKKworICAgICAgICAvLyBsdmFsdWUscnZhbHVlCisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmKHJlZiwgaW50KSA+Ojp0eXBlLCBsb25nID46OnZhbHVlICkpOworICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZiBjb25zdCAocmVmLCBpbnQpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKKyAgICAgICAgLy8gbHZhbHVlLGNvbnN0IGx2YWx1ZQorICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZihyZWYsIGNyZWYpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChyZWYsIGNyZWYpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKKyAgICAgICAgLy8gbHZhbHVlLGx2YWx1ZQorICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZihyZWYsIHJlZikgPjo6dHlwZSwgY2hhciA+Ojp2YWx1ZSApKTsKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKHJlZiwgcmVmKSA+Ojp0eXBlLCBjaGFyID46OnZhbHVlICkpOworICAgIH0KKyAgICB7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0Ojpub25jb3B5YWJsZTsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjsKKworICAgICAgICBpbnQgdiA9IDA7IG5kbmJvb3N0OjpyZWZlcmVuY2Vfd3JhcHBlcjxpbnQ+IHgodik7CisgICAgICAgIHRlc3RfZnVuYzxub25jb3B5YWJsZT4gZig3KTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGZ1bmMoZik7CisgICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiAmID4gZnVuY19yZWYoZik7CisgICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiAmID4gY29uc3QgZnVuY19yZWZfYyhmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiBjb25zdCA+IGZ1bmNfYyhmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGNvbnN0IGZ1bmNfYzIoZik7CisgICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiBjb25zdCAmID4gZnVuY19jX3JlZihmKTsKKworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX3JlZih4LDEpICkgPT0gbG9uZ18gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19yZWZfYyh4LDEpICkgPT0gbG9uZ18gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jKHgsMSkgKSA9PSBpbnRfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfYzIoeCwxKSApID09IGludF8gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jX3JlZih4LDEpICkgPT0gaW50XyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jKHgseCkgKSA9PSBjaGFyXyApOworCisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmMoeCwxKSA9PSAtOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX3JlZih4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfcmVmX2MoeCwxKSA9PSAtOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX2MoeCwxKSA9PSA4ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfYzIoeCwxKSA9PSA4ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfY19yZWYoeCwxKSA9PSA4ICk7CisgICAgfQorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90cmFpdHMuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90cmFpdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGNlNTEwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2Z1bmN0aW9uX3RyYWl0cy5odG1sCkBAIC0wLDAgKzEsMjMzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CisKKyAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KKyAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+RnVuY3Rpb24gT2JqZWN0IFRyYWl0czwvaDE+CisKKyAgPHA+VGhlIGhlYWRlciA8YSBocmVmPSIuLi8uLi9ib29zdC9mdW5jdGlvbmFsLmhwcCI+ZnVuY3Rpb25hbC5ocHA8L2E+CisgIHByb3ZpZGVzIHR3byB0cmFpdHMgY2xhc3MgdGVtcGxhdGVzIGZvciBmdW5jdGlvbnMgYW5kIGZ1bmN0aW9uIG9iamVjdHM6PC9wPgorCisgIDx0YWJsZSBib3JkZXI9IjEiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRoPlR5cGU8L3RoPgorCisgICAgICA8dGg+Q29udGVudHM8L3RoPgorCisgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiIHJvd3NwYW49IjQiPgorICAgICAgPHR0PnRlbXBsYXRlJm5ic3A7Jmx0O3R5cGVuYW1lJm5ic3A7VCZndDs8YnI+CisgICAgICBzdHJ1Y3QmbmJzcDt1bmFyeV90cmFpdHM8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PmZ1bmN0aW9uX3R5cGU8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYKKyAgICAgIChpLmUuLCA8dHQ+VDwvdHQ+KS48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5wYXJhbV90eXBlPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcGFzcyB0aGUgZnVuY3Rpb24gb3IKKyAgICAgIGZ1bmN0aW9uIG9iamVjdCBhcyBhIHBhcmFtZXRlci48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5yZXN1bHRfdHlwZTwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24KKyAgICAgIG9iamVjdC48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5hcmd1bWVudF90eXBlPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24KKyAgICAgIG9iamVjdC48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiIHJvd3NwYW49IjUiPgorICAgICAgPHR0PnRlbXBsYXRlJm5ic3A7Jmx0O3R5cGVuYW1lJm5ic3A7VCZndDs8YnI+CisgICAgICBzdHJ1Y3QmbmJzcDtiaW5hcnlfdHJhaXRzPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5mdW5jdGlvbl90eXBlPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbiBvYmplY3QgaXRzZWxmCisgICAgICAoaS5lLiwgPHR0PlQ8L3R0PikuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+cGFyYW1fdHlwZTwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHBhc3MgdGhlIGZ1bmN0aW9uIG9yCisgICAgICBmdW5jdGlvbiBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+cmVzdWx0X3R5cGU8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uCisgICAgICBvYmplY3QuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+Zmlyc3RfYXJndW1lbnRfdHlwZTwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uIG9yCisgICAgICBmdW5jdGlvbiBvYmplY3QuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+c2Vjb25kX2FyZ3VtZW50X3R5cGU8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgb2YgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gb3IKKyAgICAgIGZ1bmN0aW9uIG9iamVjdC48L3RkPgorICAgIDwvdHI+CisgIDwvdGFibGU+CisKKyAgPGgzPlVzYWdlPC9oMz4KKworICA8cD48dHQ+dW5hcnlfdHJhaXRzPC90dD4gc2hvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGVpdGhlciBhIGZ1bmN0aW9uCisgIHRha2luZyBhIHNpbmdsZSBwYXJhbWV0ZXIsIG9yIGFuIGFkYXB0YWJsZSB1bmFyeSBmdW5jdGlvbiBvYmplY3QgKGkuZS4sIGEKKyAgY2xhc3MgZGVyaXZlZCBmcm9tIDx0dD5zdGQ6OnVuYXJ5X2Z1bmN0aW9uPC90dD4gb3Igb25lIHdoaWNoIHByb3ZpZGVzIHRoZQorICBzYW1lIHR5cGVkZWZzKS4gKFNlZSAmc2VjdDsyMC4zLjEgaW4gdGhlIEMrKyBTdGFuZGFyZC4pPC9wPgorCisgIDxwPjx0dD5iaW5hcnlfdHJhaXRzPC90dD4gc2hvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGVpdGhlciBhIGZ1bmN0aW9uCisgIHRha2luZyB0d28gcGFyYW1ldGVycywgb3IgYW4gYWRhcHRhYmxlIGJpbmFyeSBmdW5jdGlvbiBvYmplY3QgKGkuZS4sIGEKKyAgY2xhc3MgZGVyaXZlZCBmcm9tIDx0dD5zdGQ6OmJpbmFyeV9mdW5jdGlvbjwvdHQ+IG9yIG9uZSB3aGljaCBwcm92aWRlcyB0aGUKKyAgc2FtZSB0eXBlZGVmcykuIChTZWUgJnNlY3Q7MjAuMy4xIGluIHRoZSBDKysgU3RhbmRhcmQuKTwvcD4KKworICA8cD5UaGUgbW9zdCBjb21tb24gdXNhZ2Ugb2YgdGhlc2UgdGVtcGxhdGVzIGlzIGluIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycywKKyAgdGh1cyBhbGxvd2luZyB0aGVtIHRvIGFkYXB0IHBsYWluIGZ1bmN0aW9ucyBhcyB3ZWxsIGFzIGZ1bmN0aW9uIG9iamVjdHMuCisgIFlvdSBjYW4gZG8gdGhpcyBieSB3aGVyZXZlciB5b3Ugd291bGQgbm9ybWFsbHkgd3JpdGUsIGZvciBleGFtcGxlLDwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordHlwZW5hbWUgT3BlcmF0aW9uOjphcmd1bWVudF90eXBlCis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPnNpbXBseSB3cml0aW5nPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0eXBlbmFtZSBib29zdDo6dW5hcnlfdHJhaXRzJmx0O09wZXJhdGlvbiZndDs6OmFyZ3VtZW50X3R5cGUKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+aW5zdGVhZC48L3A+CisKKyAgPGgzPkFkZGl0aW9uYWwgVHlwZXMgRGVmaW5lZDwvaDM+CisKKyAgPHA+SW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIHJlc3VsdCBhbmQgYXJndW1lbnQgdHlwZWRlZnMsIHRoZXNlIHRyYWl0cworICB0ZW1wbGF0ZXMgZGVmaW5lIHR3byBhZGRpdGlvbmFsIHR5cGVzLjwvcD4KKworICA8aDQ+PHR0PmZ1bmN0aW9uX3R5cGU8L3R0PjwvaDQ+CisKKyAgPHA+VGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24gb2JqZWN0LCBhbmQgY2FuIGJlIHVzZWQgaW4KKyAgZGVjbGFyYXRpb25zIHN1Y2ggYXM8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3RlbXBsYXRlICZsdDtjbGFzcyBQcmVkaWNhdGUmZ3Q7CitjbGFzcyB1bmFyeV9uZWdhdGUgOiAvLyAuLi4KK3sKKyAgLy8gLi4uCisgIHByaXZhdGU6CisgICAgPHN0cm9uZz50eXBlbmFtZSB1bmFyeV90cmFpdHMmbHQ7UHJlZGljYXRlJmd0Ozo6ZnVuY3Rpb25fdHlwZTwvc3Ryb25nPiBwcmVkOworfTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+SWYgdGhpcyB0eXBlZGVmIHdlcmUgbm90IHByb3ZpZGVkLCBpdCB3b3VsZCBub3QgYmUgcG9zc2libGUgdG8gZGVjbGFyZQorICA8dHQ+cHJlZDwvdHQ+IGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgPHR0PnVuYXJ5X25lZ2F0ZTwvdHQ+IHRvIGJlCisgIGluc3RhbnRpYXRlZCB3aXRoIGEgZnVuY3Rpb24gdHlwZSAoc2VlIHRoZSBDKysgU3RhbmRhcmQgJnNlY3Q7MTQuMy4xCisgICZwYXJhOzMpLjwvcD4KKworICA8aDQ+PHR0PnBhcmFtX3R5cGU8L3R0PjwvaDQ+CisKKyAgPHA+VGhpcyBpcyBhIHR5cGUgc3VpdGFibGUgZm9yIHBhc3NpbmcgdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIG9iamVjdCBhcyBhCisgIHBhcmFtZXRlciB0byBhbm90aGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSw8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3RlbXBsYXRlICZsdDtjbGFzcyBQcmVkaWNhdGUmZ3Q7CitjbGFzcyB1bmFyeV9uZWdhdGUgOiAvLyAuLi4KK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZSg8c3Ryb25nPnR5cGVuYW1lIHVuYXJ5X3RyYWl0cyZsdDtQcmVkaWNhdGUmZ3Q7OjpwYXJhbV90eXBlPC9zdHJvbmc+IHgpCisgICAgICAgIDoKKyAgICAgICAgcHJlZCh4KQorICAgIHt9CisgICAgLy8gLi4uCit9OworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5GdW5jdGlvbiBvYmplY3RzIGFyZSBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIGNvbnN0OyBmdW5jdGlvbiBwb2ludGVycyBhcmUKKyAgcGFzc2VkIGJ5IHZhbHVlLjwvcD4KKworICA8aDM+TGltaXRhdGlvbnM8L2gzPgorCisgIDxwPlRoaXMgbGlicmFyeSB1c2VzIHRoZXNlIHRyYWl0cyB3aXRoaW4gYWxsIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycywKKyAgdGhlb3JldGljYWxseSByZW5kZXJpbmcgPHR0PnB0cl9mdW48L3R0PiBvYnNvbGV0ZS4gSG93ZXZlciwgdGhpcmQgcGFydHkKKyAgYWRhcHRlcnMgcHJvYmFibHkgd29uJ3QgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZWNoYW5pc20sIGFuZCBzbworICA8dHQ+cHRyX2Z1bjwvdHQ+IG1heSBzdGlsbCBiZSByZXF1aXJlZC4gQWNjb3JkaW5nbHksIHRoaXMgbGlicmFyeSBhbHNvCisgIHByb3ZpZGVzIDxhIGhyZWY9InB0cl9mdW4uaHRtbCI+aW1wcm92ZWQgdmVyc2lvbnMgb2YgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uCisgIHBvaW50ZXIgYWRhcHRlcnM8L2E+LjwvcD4KKworICA8cD5UaGVzZSB0cmFpdHMgdGVtcGxhdGVzIHdpbGwgYWxzbyBub3Qgd29yayB3aXRoIGNvbXBpbGVycyB0aGF0IGZhaWwgdG8KKyAgc3VwcG9ydCBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uIG9mIHRlbXBsYXRlcy4gV2l0aCB0aGVzZSBjb21waWxlcnMsIHRoZQorICB0cmFpdHMgdGVtcGxhdGVzIGNhbiBvbmx5IGJlIGluc3RhbnRpYXRlZCB3aXRoIGFkYXB0YWJsZSBmdW5jdGlvbiBvYmplY3RzLAorICB0aHVzIHJlcXVpcmluZyA8dHQ+cHRyX2Z1bjwvdHQ+IHRvIGJlIHVzZWQsIGV2ZW4gd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0CisgIGFkYXB0ZXJzIGluIHRoaXMgbGlicmFyeS48L3A+CisgIDxocj4KKworICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KKyAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKKyAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgorCisgIDxwPlJldmlzZWQgCisgIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKKyAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+CisKKyAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+CisKKyAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgorICBjb3B5IGF0IDxhIGhyZWY9CisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlMjc5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9KYW1maWxlLnYyCkBAIC0wLDAgKzEsMTkgQEAKKworIyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKwordXNpbmcgYm9vc3Rib29rIDsKK3VzaW5nIHF1aWNrYm9vayA7CisKK3htbCBoYXNoIDogaGFzaC5xYmsgOworYm9vc3Rib29rIHN0YW5kYWxvbmUgOiBoYXNoIDoKKyAgICA8eHNsOnBhcmFtPmJvb3N0LnJvb3Q9Li4vLi4vLi4vLi4vLi4KKworICAgIDx4c2w6cGFyYW0+Y2h1bmsuZmlyc3Quc2VjdGlvbnM9MQorICAgIDx4c2w6cGFyYW0+Y2h1bmsuc2VjdGlvbi5kZXB0aD0yCisgICAgPHhzbDpwYXJhbT5nZW5lcmF0ZS5zZWN0aW9uLnRvYy5sZXZlbD0yCisgICAgPHhzbDpwYXJhbT50b2Muc2VjdGlvbi5kZXB0aD0xCisgICAgPHhzbDpwYXJhbT50b2MubWF4LmRlcHRoPTEKKyAgICA8Zm9ybWF0PnBkZjo8eHNsOnBhcmFtPmJvb3N0LnVybC5wcmVmaXg9aHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvcmVsZWFzZS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaHRtbAorICAgIDsKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9jaGFuZ2VzLnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9jaGFuZ2VzLnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2EwODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2NoYW5nZXMucWJrCkBAIC0wLDAgKzEsMTYzIEBACisKK1svIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgorIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KKworW3NlY3Rpb246Y2hhbmdlcyBDaGFuZ2UgTG9nXQorCitbaDIgQm9vc3QgMS4zMy4wXQorCisqIEluaXRpYWwgUmVsZWFzZQorCitbaDIgQm9vc3QgMS4zMy4xXQorCisqIEZpeGVkIHRoZSBwb2ludHMgZXhhbXBsZSwgYXMgcG9pbnRlZCBvdXQgYnkg5rKI5oWn5bOwLgorCitbaDIgQm9vc3QgMS4zNC4wXQorCisqIFVzZSBkZWNsYXJhdGlvbnMgZm9yIHN0YW5kYXJkIGNsYXNzZXMsIHNvIHRoYXQgdGhlIGxpYnJhcnkKKyAgZG9lc24ndCBuZWVkIHRvIGluY2x1ZGUgYWxsIG9mIHRoZWlyIGhlYWRlcnMKKyogRGVwcmVjYXRlZCB0aGUgYDxib29zdC9mdW5jdGlvbmFsL2hhc2gvKi5ocHA+YCBoZWFkZXJzLiBOb3cgYSBzaW5nbGUgaGVhZGVyLAorICA8W2hlYWRlcnJlZiBib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwXT4gaXMgdXNlZC4KKyogQWRkIHN1cHBvcnQgZm9yIHRoZSBgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TYCBtYWNybywgd2hpY2gKKyAgZGlzYWJsZXMgdGhlIGV4dGVuc2lvbnMgdG8gVFIxLgorCisqIE1pbm9yIGltcHJvdmVtZW50cyB0byB0aGUgaGFzaCBmdW5jdGlvbnMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisqIFVwZGF0ZSB0aGUgcG9ydGFibGUgZXhhbXBsZSB0byBob3BlZnVsbHkgYmUgbW9yZSBnZW5lcmFsbHkgcG9ydGFibGUuCisKK1toMiBCb29zdCAxLjM0LjFdCisKKyogW0BodHRwOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC85NTIgVGlja2V0IDk1Ml06CisgIFN1cHByZXNzIGluY29ycmVjdCA2NC1iaXQgd2FybmluZyBvbiBWaXN1YWwgQysrLgorCitbaDIgQm9vc3QgMS4zNS4wXQorCisqIFN1cHBvcnQgZm9yIGBsb25nIGxvbmdgLCBgc3RkOjpjb21wbGV4YC4KKyogSW1wcm92ZWQgYWxnb3JpdGhtIGZvciBoYXNoaW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnM6CisgICogSW1wcm92ZWQgcG9ydGFibGl0eSwgYXMgZGVzY3JpYmVkIGJ5IERhbmllbCBLcsO8Z2xlciBpbgorICAgIFtAaHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9ib29zdC11c2Vycy8yMDA1LzA4LzEzNDE4LnBocAorICAgIGEgcG9zdCB0byB0aGUgYm9vc3QgdXNlcnMgbGlzdF0uCisgICogRml0cyBtb3JlIGluZm9ybWF0aW9uIGludG8gZWFjaCBjb21iaW5lIGxvb3AsIHdoaWNoIGNhbiByZWR1Y2UgdGhlCisgICAgdGhlIG51bWJlciBvZiB0aW1lcyBjb21iaW5lIGlzIGNhbGxlZCBhbmQgaG9wZWZ1bGx5IGdpdmUgYSBiZXR0ZXIKKyAgICBxdWFsaXR5IGhhc2ggZnVuY3Rpb24uCisgICogSW1wcm92ZWQgdGhlIGFsZ29yaXRobSBmb3IgaGFzaGluZyBmbG9hdGluZyBwb2ludCBudW1iZXJzLgorICAqIE9uIEN5Z3dpbiB1c2UgYSBiaW5hcnkgaGFzaCBmdW5jdGlvbiBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYXMgCisgICAgQ3lnd2luIGRvZXNuJ3QgaGF2ZSBkZWNlbnQgZmxvYXRpbmcgcG9pbnQgZnVuY3Rpb25zIGZvciBgbG9uZyBkb3VibGVgLgorICAqIE5ldmVyIHVzZXMgYGZwY2xhc3NgIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgbG9uZyBkb3VibGVgLgorICAqIFtAaHR0cDovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMTA2NCBUaWNrZXQgMTA2NF06CisgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSB1c2Ugb2YgYGVycm5vYC4KKyogRXhwbGljaXRseSBvdmVybG9hZCBmb3IgbW9yZSBidWlsdCBpbiB0eXBlcy4KKyogTWlub3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBkb2N1bWVudGF0aW9uLgorKiBBIGZldyBidWcgYW5kIHdhcm5pbmcgZml4ZXM6CisgICogW0BodHRwOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xNTA5IFRpY2tldCAxNTA5XToKKyAgICBTdXBwcmVzcyBhbm90aGVyIFZpc3VhbCBDKysgd2FybmluZy4KKyAgKiBTb21lIHdvcmthcm91bmRzIGZvciB0aGUgU3VuIGNvbXBpbGVycy4KKworW2gyIEJvb3N0IDEuMzYuMF0KKworKiBTdG9wIHVzaW5nIE9wZW5CU0QncyBkb2RneSBgc3RkOjpudW1lcmljX2xpbWl0c2AuCisqIFVzaW5nIHRoZSBib29zdCB0eXBlZGVmcyBmb3IgYGxvbmcgbG9uZ2AgYW5kIGB1bnNpZ25lZCBsb25nIGxvbmdgLgorKiBNb3ZlIHRoZSBleHRlbnNpb25zIGludG8gdGhlaXIgb3duIGhlYWRlci4KKworW2gyIEJvb3N0IDEuMzcuMF0KKworKiBbQGh0dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzIyNjQgVGlja2V0IDIyNjRdOgorICBJbiBWaXN1YWwgQysrLCBhbHdheXMgdXNlIEM5OSBmbG9hdCBmdW5jdGlvbnMgZm9yIGBsb25nIGRvdWJsZWAgYW5kIGBmbG9hdGAgYXMKKyAgdGhlIEMrKyBvdmVybG9hZHMgYXJlbid0IGFsd2F5cyBhdmFpbGFibGVzLgorCitbaDIgQm9vc3QgMS4zOC4wXQorCisqIENoYW5nZWQgdGhlIHdhcm5pbmdzIGluIHRoZSBkZXByZWNhdGVkIGhlYWRlcnMgZnJvbSAxLjM0LjAgdG8gZXJyb3JzLiBUaGVzZQorICB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBCb29zdC4KKyogTW92ZWQgZGV0YWlsIGhlYWRlcnMgb3V0IG9mIGBib29zdC9mdW5jdGlvbmFsL2RldGFpbGAsIHNpbmNlIHRoZXkgYXJlIHBhcnQgb2YKKyAgZnVuY3Rpb25hbC9oYXNoLCBub3QgZnVuY3Rpb25hbC4gYGJvb3N0L2Z1bmN0aW9uYWwvZGV0YWlsL2NvbnRhaW5lcl9md2QuaHBwYAorICBoYXMgYmVlbiBtb3ZlZCB0byBgYm9vc3QvZGV0YWlsL2NvbnRhaW5lcl9md2QuaHBwYCBhcyBpdCdzIHVzZWQgb3V0c2lkZSBvZgorICB0aGlzIGxpYnJhcnksIHRoZSBvdGhlcnMgaGF2ZSBiZWVuIG1vdmVkIHRvIGBib29zdC9mdW5jdGlvbmFsL2hhc2gvZGV0YWlsYC4KKyAgCitbaDIgQm9vc3QgMS4zOS4wXQorCisqIE1vdmUgdGhlIGhhc2hfZndkLmhwcCBpbXBsZW1lbnRhdGlvbiBpbnRvIHRoZSBoYXNoIHN1YmRpcmVjdG9yeSwgbGVhdmluZyBhCisgIGZvcndhcmRpbmcgaGVhZGVyIGluIHRoZSBvbGQgbG9jYXRpb24uIFlvdSBzaG91bGQgc3RpbGwgdXNlIHRoZSBvbGQgbG9jYXRpb24sCisgIHRoZSBuZXcgbG9jYXRpb24gaXMgbWFpbmx5IGZvciBpbXBsZW1lbnRhdGlvbiBhbmQgcG9zc2libGUgbW9kdWxhcml6YXRpb24uCisqIFtAaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzI0MTIgVGlja2V0IDI0MTJdOiBSZW1vdmVkIGRlcHJlY2F0ZWQKKyAgaGVhZGVycy4KKyogW0BodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMjk1NyBUaWNrZXQgMjk1N106IEZpeCBjb25maWd1cmF0aW9uCisgIGZvciB2eHdvcmtzLgorCitbaDIgQm9vc3QgMS40MC4wXQorCisqIEF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHRoZSBmbG9hdCBmdW5jdGlvbnMgdXNpbmcgdGVtcGxhdGUgbWV0YXByb2dyYW1taW5nCisgIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNvbmZpZ3VyZSBldmVyeSBwb3NzaWJpbGl0eSBtYW51YWxseS4KKyogV29ya2Fyb3VuZCBmb3Igd2hlbiBTVExwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBsb25nIGRvdWJsZS4KKworW2gyIEJvb3N0IDEuNDIuMF0KKworKiBSZWR1Y2UgdGhlIG51bWJlciBvZiB3YXJuaW5ncyBmb3IgVmlzdWFsIEMrKyB3YXJuaW5nIGxldmVsIDQuCisqIFNvbWUgY29kZSBmb3JtYXR0aW5nIGNoYW5nZXMgdG8gZml0IGxpbmVzIGludG8gODAgY2hhcmFjdGVycy4KKyogUmVuYW1lIGFuIGludGVybmFsIG5hbWVzcGFjZS4KKworW2gyIEJvb3N0IDEuNDMuMF0KKworKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8zODY2IFRpY2tldCAzODY2XToKKyAgRG9uJ3QgZm93YXJkIGRlY2xhcmUgY29udGFpbmVycyB3aGVuIHVzaW5nIGdjYydzIHBhcmFsbGVsIGxpYnJhcnksCisgIGFsbG93IHVzZXIgdG8gc3RvcCBmb3J3YXJkIGRlY2xhcmF0aW9uIGJ5IGRlZmluaW5nIHRoZQorICBgQk9PU1RfREVUQUlMX05PX0NPTlRBSU5FUl9GV0RgIG1hY3JvLgorKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC80MDM4IFRpY2tldCA0MDM4XToKKyAgQXZvaWQgaGFzaGluZyAwLjUgYW5kIDAgdG8gdGhlIHNhbWUgbnVtYmVyLgorKiBTdG9wIHVzaW5nIGRlcHJlY2F0ZWQgYEJPT1NUX0hBU18qYCBtYWNyb3MuCisKK1toMiBCb29zdCAxLjQ0LjBdCisKKyogQWRkIG9wdGlvbiB0byBwcmV2ZW50IGltcGxpY2l0IGNvbnZlcnNpb25zIHdoZW4gY2FsbGluZyBgaGFzaF92YWx1ZWAgYnkKKyAgZGVmaW5pbmcgYEJPT1NUX0hBU0hfTk9fSU1QTElDSVRfQ0FTVFNgLiBXaGVuIHVzaW5nIGBib29zdDo6aGFzaGAKKyAgZm9yIGEgdHlwZSB0aGF0IGRvZXMgbm90IGhhdmUgYGhhc2hfdmFsdWVgIGRlY2xhcmVkIGJ1dCBkb2VzIGhhdmUKKyAgYW4gaW1wbGljaXQgY29udmVyc2lvbiB0byBhIHR5cGUgdGhhdCBkb2VzLCBpdCB3b3VsZCB1c2UgdGhhdAorICBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGhhc2ggaXQuIFdoaWNoIGNhbiBzb21ldGltZXMgZ28gdmVyeSB3cm9uZywKKyAgZS5nLiB1c2luZyBhIGNvbnZlcnNpb24gdG8gYm9vbCBhbmQgb25seSBoYXNoaW5nIHRvIDIgcG9zc2libGUKKyAgdmFsdWVzLiBTaW5jZSBmaXhpbmcgdGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSBhbmQgd2FzIG9ubHkKKyAgYXBwcm9hY2hlZCBxdWl0ZSBsYXRlIGluIHRoZSByZWxlYXNlIGN5Y2xlIHdpdGggbGl0dGxlIGRpc2N1c3Npb24KKyAgaXQncyBvcHQtaW4gZm9yIG5vdy4gVGhpcywgb3Igc29tZXRoaW5nIGxpa2UgaXQsIHdpbGwgYmVjb21lIHRoZQorICBkZWZhdWx0IGluIGEgZnV0dXJlIHZlcnNpb24uCisKK1toMiBCb29zdCAxLjQ2LjBdCisKKyogQXZvaWQgd2FybmluZyBkdWUgd2l0aCBnY2MncyBgLVdjb252ZXJzaW9uYCBmbGFnLgorCitbaDIgQm9vc3QgMS41MC4wXQorCisqIFtAaHR0cDovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvNjc3MSBUaWNrZXQgNjc3MV06CisgIEF2b2lkIGdjYydzIGAtV2Zsb2F0LWVxdWFsYCB3YXJuaW5nLgorKiBbQGh0dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzY4MDYgVGlja2V0IDY4MDZdOgorICBTdXBwb3J0IGBzdGQ6OmFycmF5YCBhbmQgYHN0ZDo6dHVwbGVgIHdoZW4gYXZhaWxhYmxlLgorKiBBZGQgZGVwcmVjYXRpb24gd2FybmluZyB0byB0aGUgbG9uZyBkZXByZWNhdGVkCisgIGBib29zdC9mdW5jdGlvbmFsL2RldGFpbC9jb250YWluZXJfZndkLmhwcGAuCisKK1toMiBCb29zdCAxLjUxLjBdCisKKyogU3VwcG9ydCB0aGUgc3RhbmRhcmQgc21hcnQgcG9pbnRlcnMuCisqIGBoYXNoX3ZhbHVlYCBub3cgaW1wbGVtZW50ZWQgdXNpbmcgU0ZJTkFFIHRvIGF2b2lkIGltcGxpY2l0IGNhc3RzIHRvIGJ1aWx0CisgIGluIHR5cGVzIHdoZW4gY2FsbGluZyBpdC4KKyogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBjb25maWcgbWFjcm9zLgorCitbaDIgQm9vc3QgMS41Mi4wXQorCisqIFJlc3RvcmUgYGVudW1gIHN1cHBvcnQsIHdoaWNoIHdhcyBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiB0aGUgbGFzdCB2ZXJzaW9uLgorKiBOZXcgZmxvYXRpbmcgcG9pbnQgaGFzaGVyIC0gd2lsbCBoYXNoIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb24gbW9yZQorICBwbGF0Zm9ybXMsIHdoaWNoIHNob3VsZCBiZSBmYXN0ZXIuCisKK1toMiBCb29zdCAxLjUzLjBdCisKKyogQWRkIHN1cHBvcnQgZm9yIGBib29zdDo6aW50MTI4X3R5cGVgIGFuZCBgYm9vc3Q6OnVpbnQxMjhfdHlwZWAgd2hlcmUKKyAgYXZhaWxhYmxlIC0gY3VycmVudGx5IG9ubHkgYF9faW50MTI4YCBhbmQgYHVuc2lnbmVkIF9faW50MTI4YCBvbiBzb21lCisgIHZlcnNpb25zIG9mIGdjYy4KKyogT24gcGxhdGZvcm1zIHRoYXQgYXJlIGtub3duIHRvIGhhdmUgdGhlIHN0YW5kYXJkIGZsb2F0aW5nIHBvaW50IGZ1bmN0aW9ucywKKyAgZG9uJ3QgdXNlIGF1dG9tYXRpYyBkZXRlY3Rpb24gLSB3aGljaCBjYW4gYnJlYWsgaWYgdGhlcmUgYXJlIGFtYmlndW91cworICBvdmVybG9hZHMuCisqIEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIHdoZW4gdXNpbmcgdGhlIGJpbmFyeSBmbG9hdCBoYXNoIChUaG9tYXMgSGVsbGVyKS4KKworW2gyIEJvb3N0IDEuNTQuMF0KKworKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC83OTU3IFRpY2tldCA3OTU3XToKKyAgRml4ZWQgYSB0eXBvLgorCitbZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9kaXNhYmxlLnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9kaXNhYmxlLnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2RlYzZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2Rpc2FibGUucWJrCkBAIC0wLDAgKzEsMjkgQEAKKworWy8gQ29weXJpZ2h0IDIwMDUtMjAwOCBEYW5pZWwgSmFtZXMuCisgLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorCitbc2VjdGlvbjpkaXNhYmxlIERpc2FibGluZyBUaGUgRXh0ZW5zaW9uc10KKworV2hpbGUgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSdzIGV4dGVuc2lvbnMgYXJlIGdlbmVyYWxseSB1c2VmdWwsIHlvdSBtaWdodCB3YW50Cit0byB0dXJuIHRoZW0gb2YgaW4gb3JkZXIgdG8gY2hlY2sgdGhhdCB5b3VyIGNvZGUgd2lsbCB3b3JrIHdpdGggb3RoZXIKK2ltcGxlbWVudGF0aW9ucyBvZiBUUjEuIFRvIGRvIHRoaXMgZGVmaW5lIHRoZSBtYWNybyBgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TYC4KK1doZW4gdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBzcGVjaWFsaXNhdGlvbnMgZGV0YWlsZWQKK2luIFRSMSB3aWxsIGJlIGRlY2xhcmVkLiBCdXQsIGlmIHlvdSBsYXRlciB1bmRlZmluZSB0aGUgbWFjcm8gYW5kIGluY2x1ZGUKKzxbaGVhZGVycmVmIGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHBdPiB0aGVuIHRoZSBub24tc3BlY2lhbGlzZWQgZm9ybSB3aWxsIGJlIGRlZmluZWQKKy0gYWN0aXZhdGluZyB0aGUgZXh0ZW5zaW9ucy4KKworSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgbmV2ZXIgdW5kZWZpbmUgdGhlIG1hY3JvIC0gYW5kIG9ubHkgZGVmaW5lCitpdCBzbyB0aGF0IGl0IGFwcGxpZXMgdG8gdGhlIGNvbXBsZXRlIHRyYW5zbGF0aW9uIHVuaXQsIGVpdGhlciBieSBkZWZpbmluZyBpdAorYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBzb3VyY2UgZmlsZSBvciwgcHJlZmVyYWJseSwgYnkgdXNpbmcgYSBjb21waWxlcgorc3dpdGNoIG9yIHByZWZlcmVuY2UuIEFuZCB5b3UgcmVhbGx5IHNob3VsZCBuZXZlciBkZWZpbmUgaXQgaW4gaGVhZGVyIGZpbGVzLgorCitJZiB5b3UgYXJlIHdyaXRpbmcgYSBsaWJyYXJ5IHdoaWNoIGhhcyBjb2RlIGluIHRoZSBoZWFkZXIgd2hpY2ggcmVxdWlyZXMgdGhlCitleHRlbnNpb25zLCB0aGVuIHRoZSBiZXN0IGFjdGlvbiBpcyB0byB0ZWxsIHVzZXJzIG5vdCB0byBkZWZpbmUgdGhlIG1hY3JvLgorVGhlaXIgY29kZSB3b24ndCBbJ3JlcXVpcmVdIHRoZSBtYWNyby4KKworVHJhbnNsYXRpb24gdW5pdHMgdGhhdCBhcmUgY29tcGlsZWQgd2l0aCB0aGUgbWFjcm8gZGVmaW5lZCB3aWxsIGxpbmsgd2l0aCB1bml0cwordGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuIFRoaXMgZmVhdHVyZSBoYXMgYmVlbiBkZXNpZ25lZCB0byBhdm9pZCBPRFIKK3Zpb2xhdGlvbnMuCisKK1tlbmRzZWN0XQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2hhc2gucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2hhc2gucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjcyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaGFzaC5xYmsKQEAgLTAsMCArMSwyOSBAQAorW2xpYnJhcnkgQm9vc3QuRnVuY3Rpb25hbC9IYXNoCisgICAgW3F1aWNrYm9vayAxLjVdCisgICAgW2F1dGhvcnMgW0phbWVzLCBEYW5pZWxdXQorICAgIFtjb3B5cmlnaHQgMjAwNSAyMDA2IDIwMDcgMjAwOCBEYW5pZWwgSmFtZXNdCisgICAgW3B1cnBvc2UgQSBUUjEgaGFzaCBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYW4gYmUgZXh0ZW5kZWQgdG8gaGFzaCB1c2VyCisgICAgICAgIGRlZmluZWQgdHlwZXNdCisgICAgW2NhdGVnb3J5IGhpZ2hlci1vcmRlcl0KKyAgICBbaWQgaGFzaF0KKyAgICBbZGlybmFtZSBmdW5jdGlvbmFsL2hhc2hdCisgICAgW2xpY2Vuc2UKKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorICAgICAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0XSkKKyAgICBdCitdCisKK1tkZWYgX19pc3N1ZXNfXworICAgIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNy5wZGYKKyAgICBMaWJyYXJ5IEV4dGVuc2lvbiBUZWNobmljYWwgUmVwb3J0IElzc3VlcyBMaXN0XV0KKworW2luY2x1ZGU6aGFzaCBpbnRyby5xYmtdCitbaW5jbHVkZTpoYXNoIHR1dG9yaWFsLnFia10KK1tpbmNsdWRlOmhhc2ggcG9ydGFiaWxpdHkucWJrXQorW2luY2x1ZGU6aGFzaCBkaXNhYmxlLnFia10KK1tpbmNsdWRlOmhhc2ggY2hhbmdlcy5xYmtdCitbaW5jbHVkZTpoYXNoIHJhdGlvbmFsZS5xYmtdCitbeGluY2x1ZGUgcmVmLnhtbF0KK1tpbmNsdWRlOmhhc2ggbGlua3MucWJrXQorW2luY2x1ZGU6aGFzaCB0aGFua3MucWJrXQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2ludHJvLnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9pbnRyby5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2ZTk5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9pbnRyby5xYmsKQEAgLTAsMCArMSw1MiBAQAorCitbLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KKyAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCisKK1tzZWN0aW9uOmludHJvIEludHJvZHVjdGlvbl0KKworW2RlZiBfX3RyMS1mdWxsX18KKyAgICBbQGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzYucGRmCisgICAgRHJhZnQgVGVjaG5pY2FsIFJlcG9ydCBvbiBDKysgTGlicmFyeSBFeHRlbnNpb25zXV0KK1tkZWYgX190cjFfXworICAgIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGYKKyAgICBUUjFdXQorW2RlZiBfX3Vub3JkZXJlZF9fIFtsaW5rIHVub3JkZXJlZCBCb29zdC5Vbm9yZGVyZWRdXQorW2RlZiBfX2ludHJ1c2l2ZV9fIFtsaW5rIGludHJ1c2l2ZS51bm9yZGVyZWRfc2V0X3Vub3JkZXJlZF9tdWx0aXNldCBCb29zdC5JbnRydXNpdmVdXQorW2RlZiBfX211bHRpLWluZGV4X18gW0Bib29zdDovbGlicy9tdWx0aV9pbmRleC9kb2MvaW5kZXguaHRtbAorICAgIEJvb3N0IE11bHRpLUluZGV4IENvbnRhaW5lcnMgTGlicmFyeV1dCitbZGVmIF9fbXVsdGktaW5kZXgtc2hvcnRfXyBbQGJvb3N0Oi9saWJzL211bHRpX2luZGV4L2RvYy9pbmRleC5odG1sCisgICAgQm9vc3QuTXVsdGlJbmRleF1dCitbZGVmIF9fYmltYXBfXyBbQGJvb3N0Oi9saWJzL2JpbWFwL2luZGV4Lmh0bWwgQm9vc3QuQmltYXBdXQorW2RlZiBfX2hhc2gtZnVuY3Rpb25fXyBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFzaF9mdW5jdGlvbiBoYXNoIGZ1bmN0aW9uXV0KK1tkZWYgX19oYXNoLXRhYmxlX18gW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhc2hfdGFibGUgaGFzaCB0YWJsZV1dCisKK1tjbGFzc3JlZiBib29zdDo6aGFzaF0gaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIF9faGFzaC1mdW5jdGlvbl9fIG9iamVjdAorc3BlY2lmaWVkIGJ5IHRoZSBfX3RyMS1mdWxsX18gKFRSMSkuIEl0IGlzIHRoZSBkZWZhdWx0IGhhc2ggZnVuY3Rpb24gZm9yCitfX3Vub3JkZXJlZF9fLCBfX2ludHJ1c2l2ZV9fJ3MgdW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIGFuZAorX19tdWx0aS1pbmRleC1zaG9ydF9fJ3MgaGFzaCBpbmRpY2llcyBhbmQgX19iaW1hcF9fJ3MgYHVub3JkZXJlZF9zZXRfb2ZgLgorCitBcyBpdCBpcyBjb21wbGlhbnQgd2l0aCBfX3RyMV9fLCBpdCB3aWxsIHdvcmsgd2l0aDoKKworKiBpbnRlZ2VycworKiBmbG9hdHMKKyogcG9pbnRlcnMKKyogc3RyaW5ncworCitJdCBhbHNvIGltcGxlbWVudHMgdGhlIGV4dGVuc2lvbiBwcm9wb3NlZCBieSBQZXRlciBEaW1vdiBpbiBpc3N1ZSA2LjE4IG9mIHRoZQorX19pc3N1ZXNfXyAocGFnZSA2MyksIHRoaXMgYWRkcyBzdXBwb3J0IGZvcjoKKworKiBhcnJheXMKKyogYHN0ZDo6cGFpcmAKKyogdGhlIHN0YW5kYXJkIGNvbnRhaW5lcnMuCisqIGV4dGVuZGluZyBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdIGZvciBjdXN0b20gdHlwZXMuCisKK1tub3RlCitUaGlzIGhhc2ggZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBpbiBjb250YWluZXJzIGJhc2VkIG9uCit0aGUgU1RMIGFuZCBpcyBub3Qgc3VpdGFibGUgYXMgYSBnZW5lcmFsIHB1cnBvc2UgaGFzaCBmdW5jdGlvbi4KK0ZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBbbGluayBoYXNoLnJhdGlvbmFsZSByYXRpb25hbGVdLgorXQorCisKK1tlbmRzZWN0XQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvbGlua3MucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2xpbmtzLnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDU1MzZlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2xpbmtzLnFiawpAQCAtMCwwICsxLDI3IEBACisKK1svIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgorIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KKworW3NlY3Rpb246bGlua3MgTGlua3NdCisKK1sqQSBQcm9wb3NhbCB0byBBZGQgSGFzaCBUYWJsZXMgdG8gdGhlIFN0YW5kYXJkIExpYnJhcnldCitbQGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL0pUQzEvU0MyMi9XRzIxL2RvY3MvcGFwZXJzLzIwMDMvbjE0NTYuaHRtbF0KK1RoZSBoYXNoIHRhYmxlIHByb3Bvc2FsIGV4cGxhaW5zIG11Y2ggb2YgdGhlIGRlc2lnbi4gVGhlIGhhc2ggZnVuY3Rpb24gb2JqZWN0CitpcyBkaXNjdXNzZWQgaW4gU2VjdGlvbiBELgorCitbKlRoZSBDKysgU3RhbmRhcmQgTGlicmFyeSBUZWNobmljYWwgUmVwb3J0Ll0KK1tAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGZdCitDb250YWlucyB0aGUgaGFzaCBmdW5jdGlvbiBzcGVjaWZpY2F0aW9uIGluIHNlY3Rpb24gNi4zLjIuCisKK1sqTGlicmFyeSBFeHRlbnNpb24gVGVjaG5pY2FsIFJlcG9ydCBJc3N1ZXMgTGlzdC5dCitbQGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzcucGRmXQorVGhlIGxpYnJhcnkgaW1wbGVtZW50cyB0aGUgZXh0ZW5zaW9uIGRlc2NyaWJlZCBpbiBJc3N1ZSA2LjE4LCBwYWdlcyA2My02Ny4KKworWypNZXRob2RzIGZvciBJZGVudGlmeWluZyBWZXJzaW9uZWQgYW5kIFBsYWdpYXJpc2VkIERvY3VtZW50c10KK1RpbW90aHkgQy4gSG9hZCwgSnVzdGluIFpvYmVsCitbQGh0dHA6Ly93d3cuY3Mucm1pdC5lZHUuYXUvfmp6L2Z1bGx0ZXh0L2phc2lzdC10Y2gucGRmXQorQ29udGFpbnMgdGhlIGhhc2ggZnVuY3Rpb24gdGhhdCBbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXSBpcyBiYXNlZCBvbi4KKworW2VuZHNlY3RdCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9wb3J0YWJpbGl0eS5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcG9ydGFiaWxpdHkucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NWJjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcG9ydGFiaWxpdHkucWJrCkBAIC0wLDAgKzEsOTMgQEAKKworWy8gQ29weXJpZ2h0IDIwMDUtMjAwOCBEYW5pZWwgSmFtZXMuCisgLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorCitbc2VjdGlvbjpwb3J0YWJpbGl0eSBQb3J0YWJpbGl0eV0KKworW2RlZiBfX2Jvb3N0X2hhc2hfXyBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdXQorCitfX2Jvb3N0X2hhc2hfXyBpcyB3cml0dGVuIHRvIGJlIGFzIHBvcnRhYmxlIGFzIHBvc3NpYmxlLCBidXQgdW5mb3J0dW5hdGVseSwgc2V2ZXJhbAorb2xkZXIgY29tcGlsZXJzIGRvbid0IHN1cHBvcnQgYXJndW1lbnQgZGVwZW5kZW50IGxvb2t1cCAoQURMKSAtIHRoZSBtZWNoYW5pc20KK3VzZWQgZm9yIGN1c3RvbWlzYXRpb24uICBPbiB0aG9zZSBjb21waWxlcnMgY3VzdG9tIG92ZXJsb2FkcyBmb3IgYGhhc2hfdmFsdWVgCituZWVkcyB0byBiZSBkZWNsYXJlZCBpbiB0aGUgYm9vc3QgbmFtZXNwYWNlLgorCitPbiBhIHN0cmljdGx5IHN0YW5kYXJkcyBjb21wbGlhbnQgY29tcGlsZXIsIGFuIG92ZXJsb2FkIGRlZmluZWQgaW4gdGhlCitib29zdCBuYW1lc3BhY2Ugd29uJ3QgYmUgZm91bmQgd2hlbiBfX2Jvb3N0X2hhc2hfXyBpcyBpbnN0YW50aWF0ZWQsCitzbyBmb3IgdGhlc2UgY29tcGlsZXJzIHRoZSBvdmVybG9hZCBzaG91bGQgb25seSBiZSBkZWNsYXJlZCBpbiB0aGUgc2FtZQorbmFtZXNwYWNlIGFzIHRoZSBjbGFzcy4KKworTGV0J3Mgc2F5IHdlIGhhdmUgYSBzaW1wbGUgY3VzdG9tIHR5cGU6CisKKyAgICBuYW1lc3BhY2UgZm9vCisgICAgeworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICAgICAgY2xhc3MgY3VzdG9tX3R5cGUKKyAgICAgICAgeworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgY3VzdG9tX3R5cGUoVCB4KSA6IHZhbHVlKHgpIHt9CisKKyAgICAgICAgICAgIGZyaWVuZCBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGN1c3RvbV90eXBlIHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX19ib29zdF9oYXNoX188aW50PiBoYXNoZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hlcih4LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKK09uIGEgY29tcGxpYW50IGNvbXBpbGVyLCB3aGVuIGBoYXNoX3ZhbHVlYCBpcyBjYWxsZWQgZm9yIHRoaXMgdHlwZSwKK2l0IHdpbGwgbG9vayBhdCB0aGUgbmFtZXNwYWNlIGluc2lkZSB0aGUgdHlwZSBhbmQgZmluZCBgaGFzaF92YWx1ZWAKK2J1dCBvbiBhIGNvbXBpbGVyIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBBREwgYGhhc2hfdmFsdWVgIHdvbid0IGJlIGZvdW5kLgorVG8gbWFrZSB0aGluZ3Mgd29yc2UsIHNvbWUgY29tcGlsZXJzIHdoaWNoIGRvIHN1cHBvcnQgQURMIHdvbid0IGZpbmQKK2EgZnJpZW5kIGNsYXNzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcy4KKworU28gZmlyc3QgbW92ZSB0aGUgbWVtYmVyIGZ1bmN0aW9uIG91dCBvZiB0aGUgY2xhc3M6CisKKyAgICBuYW1lc3BhY2UgZm9vCisgICAgeworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICAgICAgY2xhc3MgY3VzdG9tX3R5cGUKKyAgICAgICAgeworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgY3VzdG9tX3R5cGUoVCB4KSA6IHZhbHVlKHgpIHt9CisKKyAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGhhc2goY3VzdG9tX3R5cGUgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfX2Jvb3N0X2hhc2hfXzxUPiBoYXNoZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hlcih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgICAgIGlubGluZSBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGN1c3RvbV90eXBlPFQ+IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4Lmhhc2goKTsKKyAgICAgICAgfQorICAgIH0KKworVW5mb3J0dW5hdGVseSwgSSBjb3VsZG4ndCBkZWNsYXJlIGhhc2hfdmFsdWUgYXMgYSBmcmllbmQsIGFzIHNvbWUgY29tcGlsZXJzCitkb24ndCBzdXBwb3J0IHRlbXBsYXRlIGZyaWVuZHMsIHNvIGluc3RlYWQgSSBkZWNsYXJlZCBhIG1lbWJlciBmdW5jdGlvbiB0bworY2FsY3VsYXRlIHRoZSBoYXNoLCBhbmQgY2FsbGVkIGl0IGZyb20gaGFzaF92YWx1ZS4KKworRm9yIGNvbXBpbGVycyB3aGljaCBkb24ndCBzdXBwb3J0IEFETCwgaGFzaF92YWx1ZSBuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZQorYm9vc3QgbmFtZXNwYWNlOgorCisgICAgI2lmZGVmIEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVAKKyAgICBuYW1lc3BhY2UgYm9vc3QKKyAgICAjZWxzZQorICAgIG5hbWVzcGFjZSBmb28KKyAgICAjZW5kaWYKKyAgICB7CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgICAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGZvbzo6Y3VzdG9tX3R5cGU8VD4geCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgICAgICB9CisgICAgfQorCitGdWxsIGNvZGUgZm9yIHRoaXMgZXhhbXBsZSBpcyBhdAorW0Bib29zdDovbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9ydGFibGUuY3BwIC9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHBdLgorCitbZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9yYXRpb25hbGUucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JhdGlvbmFsZS5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyMTA4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9yYXRpb25hbGUucWJrCkBAIC0wLDAgKzEsNTAgQEAKKworWy8gQ29weXJpZ2h0IDIwMTEgRGFuaWVsIEphbWVzLgorIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KKworW3NlY3Rpb246cmF0aW9uYWxlIFJhdGlvbmFsZV0KKworVGhlIHJhdGlvbmFsZSBjYW4gYmUgZm91bmQgaW4gdGhlIG9yaWdpbmFsIGRlc2lnbgorW2Zvb3Rub3RlIGlzc3VlIDYuMTggb2YgdGhlIF9faXNzdWVzX18gKHBhZ2UgNjMpXS4KKworW2hlYWRpbmcgUXVhbGl0eSBvZiB0aGUgaGFzaCBmdW5jdGlvbl0KKworTWFueSBoYXNoIGZ1bmN0aW9ucyBzdHJpdmUgdG8gaGF2ZSBsaXR0bGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgaW5wdXQKK2FuZCBvdXRwdXQgdmFsdWVzLiBUaGV5IGF0dGVtcHQgdG8gdW5pZm9ybWFsbHkgZGlzdHJpYnV0ZSB0aGUgb3V0cHV0Cit2YWx1ZXMgZm9yIHZlcnkgc2ltaWxhciBpbnB1dHMuIFRoaXMgaGFzaCBmdW5jdGlvbiBtYWtlcyBubyBzdWNoCithdHRlbXB0LiBJbiBmYWN0LCBmb3IgaW50ZWdlcnMsIHRoZSByZXN1bHQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gaXMgb2Z0ZW4KK2p1c3QgdGhlIGlucHV0IHZhbHVlLiBTbyBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgaW5wdXQgdmFsdWVzIHdpbGwgb2Z0ZW4KK3Jlc3VsdCBpbiBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgb3V0cHV0IHZhbHVlcy4KK1RoaXMgbWVhbnMgdGhhdCBpdCBpcyBub3QgYXBwcm9wcmlhdGUgYXMgYSBnZW5lcmFsIGhhc2ggZnVuY3Rpb24uIEZvcgorZXhhbXBsZSwgYSBoYXNoIHRhYmxlIG1heSBkaXNjYXJkIGJpdHMgZnJvbSB0aGUgaGFzaCBmdW5jdGlvbiByZXN1bHRpbmcKK2luIGxpa2VseSBjb2xsaXNpb25zLCBvciBtaWdodCBoYXZlIHBvb3IgY29sbGlzaW9uIHJlc29sdXRpb24gd2hlbiBoYXNoCit2YWx1ZXMgYXJlIGNsdXN0ZXJlZCB0b2dldGhlci4gSW4gc3VjaCBjYXNlcyB0aGlzIGhhc2ggZnVuY3Rpb24gd2lsbAorcHJlZm9ybSBwb29ybHkuCisKK0J1dCB0aGUgc3RhbmRhcmQgaGFzIG5vIHN1Y2ggcmVxdWlyZW1lbnQgZm9yIHRoZSBoYXNoIGZ1bmN0aW9uLAoraXQganVzdCByZXF1aXJlcyB0aGF0IHRoZSBoYXNoZXMgb2YgdHdvIGRpZmZlcmVudCB2YWx1ZXMgYXJlIHVubGlrZWx5Cit0byBjb2xsaWRlLiBDb250YWluZXJzIG9yIGFsZ29yaXRobXMKK2Rlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgc3RhbmRhcmQgaGFzaCBmdW5jdGlvbiB3aWxsIGhhdmUgdG8gYmUKK2ltcGxlbWVudGVkIHRvIHdvcmsgd2VsbCB3aGVuIHRoZSBoYXNoIGZ1bmN0aW9uJ3Mgb3V0cHV0IGlzIGNvcnJlbGF0ZWQKK3RvIGl0cyBpbnB1dC4gU2luY2UgdGhleSBhcmUgcGF5aW5nIHRoYXQgY29zdCBhIGhpZ2hlciBxdWFsaXR5IGhhc2ggZnVuY3Rpb24KK3dvdWxkIGJlIHdhc3RlZnVsLgorCitGb3Igb3RoZXIgdXNlIGNhc2VzLCBpZiB5b3UgZG8gbmVlZCBhIGhpZ2hlciBxdWFsaXR5IGhhc2ggZnVuY3Rpb24sCit0aGVuIG5laXRoZXIgdGhlIHN0YW5kYXJkIGhhc2ggZnVuY3Rpb24gb3IgYGJvb3N0OjpoYXNoYCBhcmUgYXBwcm9wcmlhdGUuCitUaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zCithdmFpbGFibGUuIE9uZSBpcyB0byB1c2UgYSBzZWNvbmQgaGFzaCBvbiB0aGUgb3V0cHV0IG9mIHRoaXMgaGFzaAorZnVuY3Rpb24sIHN1Y2ggYXMgW0BodHRwOi8vd3d3LmNvbmNlbnRyaWMubmV0L350dHdhbmcvdGVjaC9pbnRoYXNoLmh0bQorVGhvbWFzIFdhbmcncyBoYXNoIGZ1bmN0aW9uXS4gVGhpcyB0aGlzIG1heSBub3Qgd29yayBhcword2VsbCBhcyBhIGhhc2ggYWxnb3JpdGhtIHRhaWxvcmVkIGZvciB0aGUgaW5wdXQuCisKK0ZvciBzdHJpbmdzIHRoZXJlIGFyZSBzZXZlcmFsIGZhc3QsIGhpZ2ggcXVhbGl0eSBoYXNoIGZ1bmN0aW9ucworYXZhaWxhYmxlIChmb3IgZXhhbXBsZSBbQGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zbWhhc2hlci8gTXVybXVySGFzaDNdCithbmQgW0BodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2l0eWhhc2gvIEdvb2dsZSdzIENpdHlIYXNoXSksCithbHRob3VnaCB0aGV5IHRlbmQgdG8gYmUgbW9yZSBtYWNoaW5lIHNwZWNpZmljLgorVGhlc2UgbWF5IGFsc28gYmUgYXBwcm9wcmlhdGUgZm9yIGhhc2hpbmcgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YKK3lvdXIgZGF0YSAtIHByb3ZpZGluZyB0aGF0IGFsbCBlcXVhbCB2YWx1ZXMgaGF2ZSBhbiBlcXVhbAorcmVwcmVzZW50YXRpb24sIHdoaWNoIGlzIG5vdCBhbHdheXMgdGhlIGNhc2UgKGUuZy4gZm9yIGZsb2F0aW5nIHBvaW50Cit2YWx1ZXMpLgorCitbZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9yZWYueG1sIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JlZi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjNDI3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9yZWYueG1sCkBAIC0wLDAgKzEsODgzIEBACisKKzwhLS0KK0NvcHlyaWdodCBEYW5pZWwgSmFtZXMgMjAwNS0yMDA5CitEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCitmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKy0tPgorCis8bGlicmFyeS1yZWZlcmVuY2U+CisgIDxzZWN0aW9uIGlkPSJoYXNoLnJlZmVyZW5jZS5zcGVjaWZpY2F0aW9uIj4KKyAgICA8cGFyYT5Gb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbiwgc2VlIHNlY3Rpb24gNi4zIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM2LnBkZiI+QysrIFN0YW5kYXJkIExpYnJhcnkgVGVjaG5pY2FsIFJlcG9ydDwvdWxpbms+CisgICAgICAgIGFuZCBpc3N1ZSA2LjE4IG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM3LnBkZiI+TGlicmFyeSBFeHRlbnNpb24gVGVjaG5pY2FsIFJlcG9ydCBJc3N1ZXMgTGlzdDwvdWxpbms+IChwYWdlIDYzKS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdGlvbj4KKyAgPGhlYWRlciBuYW1lPSJib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwIj4KKyAgICA8cGFyYT4KKyAgICAgIERlZmluZXMgPGNvZGU+PGNsYXNzbmFtZT5ib29zdDo6aGFzaDwvY2xhc3NuYW1lPjwvY29kZT4sCisgICAgICBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICA8L3BhcmE+CisKKyAgICA8bmFtZXNwYWNlIG5hbWU9ImJvb3N0Ij4KKworICAgICAgPCEtLQorICAgICAgICBib29zdDo6aGFzaAorICAgICAgICAtLT4KKworICAgICAgPHN0cnVjdCBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgIDwvdGVtcGxhdGU+CisKKyAgICAgICAgPGluaGVyaXQgYWNjZXNzPSJwdWJsaWMiPgorICAgICAgICAgIDxjbGFzc25hbWU+c3RkOjp1bmFyeV9mdW5jdGlvbiZsdDtULCBzdGQ6OnNpemVfdCZndDs8L2NsYXNzbmFtZT4KKyAgICAgICAgPC9pbmhlcml0PgorCisgICAgICAgIDxwdXJwb3NlPjxzaW1wYXJhPkEgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGYiPlRSMTwvdWxpbms+IGNvbXBsaWFudCBoYXNoIGZ1bmN0aW9uIG9iamVjdC48L3NpbXBhcmE+PC9wdXJwb3NlPgorCisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPlQgY29uc3QmYW1wOzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPjxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+PC9yZXR1cm5zPgorICAgICAgICAgIDxub3Rlcz4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGUgY2FsbCB0byA8Y29kZT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT48L2NvZGU+CisgICAgICAgICAgICAgIGlzIHVucXVhbGlmaWVkLCBzbyB0aGF0IGN1c3RvbSBvdmVybG9hZHMgY2FuIGJlCisgICAgICAgICAgICAgIGZvdW5kIHZpYSBhcmd1bWVudCBkZXBlbmRlbnQgbG9va3VwLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoaXMgaXMgbm90IGRlZmluZWQgd2hlbiB0aGUgbWFjcm8gPGNvZGU+Qk9PU1RfSEFTSF9OT19FWFRFTlNJT05TPC9jb2RlPgorICAgICAgICAgICAgICBpcyBkZWZpbmVkLiBUaGUgc3BlY2lhbGl6YXRpb25zIGFyZSBzdGlsbCBkZWZpbmVkLCBzbyBvbmx5IHRoZSBzcGVjaWFsaXphdGlvbnMKKyAgICAgICAgICAgICAgcmVxdWlyZWQgYnkgVFIxIGFyZSBkZWZpbmVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEZvcndhcmQgZGVjbGFyZWQgaW4KKyAgICAgICAgICAgICAgPGNvZGU+Jmx0O2Jvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwJmd0OzwvY29kZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L25vdGVzPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+CisgICAgICAgICAgICBPbmx5IHRocm93cyBpZgorICAgICAgICAgICAgPGNvZGU+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KFQpPC9jb2RlPiB0aHJvd3MuCisgICAgICAgICAgPC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0PgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+Ym9vbDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5ib29sPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5jaGFyPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPmNoYXI8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnNpZ25lZCBjaGFyPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPnNpZ25lZCBjaGFyPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz51bnNpZ25lZCBjaGFyPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPnVuc2lnbmVkIGNoYXI8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPndjaGFyX3Q8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+d2NoYXJfdDwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+c2hvcnQ8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+c2hvcnQ8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnVuc2lnbmVkIHNob3J0PC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPnVuc2lnbmVkIHNob3J0PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5pbnQ8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+aW50PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz51bnNpZ25lZCBpbnQ8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+dW5zaWduZWQgaW50PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5sb25nPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPmxvbmc8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnVuc2lnbmVkIGxvbmc8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+dW5zaWduZWQgbG9uZzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+bG9uZyBsb25nPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPmxvbmcgbG9uZzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+dW5zaWduZWQgbG9uZyBsb25nPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPnVuc2lnbmVkIGxvbmcgbG9uZzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+ZmxvYXQ8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+ZmxvYXQ8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPmRvdWJsZTwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5kb3VibGU8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPmxvbmcgZG91YmxlPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPmxvbmcgZG91YmxlPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5zdGQ6OnN0cmluZzwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5zdGQ6OnN0cmluZyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5zdGQ6OndzdHJpbmc8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+c3RkOjp3c3RyaW5nIGNvbnN0JmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPlQqPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPlQqPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5zdGQ6OnR5cGVfaW5kZXg8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+c3RkOjp0eXBlX2luZGV4PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT48Y29kZT52YWwuaGFzaF9jb2RlKCk8L2NvZGU+PC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgICA8bm90ZXM+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmx5IGF2YWlsYWJsZSBpZiBpdCdzIGluIHlvdXIgc3RhbmRhcmQgbGlicmFyeSBhbmQgQm9vc3QuQ29uZmlnCisgICAgICAgICAgICBpcyBhd2FyZSBvZiBpdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZXM+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPGZyZWUtZnVuY3Rpb24tZ3JvdXAgbmFtZT0iU3VwcG9ydCBmdW5jdGlvbnMgKEJvb3N0IGV4dGVuc2lvbikuIj4gCisKKyAgICAgIDwhLS0KKyAgICAgICAgYm9vc3Q6Omhhc2hfY29tYmluZQorICAgICAgICAtLT4KKworICAgICAgPGZ1bmN0aW9uIG5hbWU9Imhhc2hfY29tYmluZSI+CisgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgorICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICA8dHlwZT52b2lkPC90eXBlPgorICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InNlZWQiPjxwYXJhbXR5cGU+c2l6ZV90ICZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idiI+PHBhcmFtdHlwZT5UIGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPHB1cnBvc2U+PHNpbXBhcmE+CisgICAgICAgICAgICBDYWxsZWQgcmVwZWF0ZWRseSB0byBpbmNyZW1lbnRhbGx5IGNyZWF0ZSBhIGhhc2ggdmFsdWUgZnJvbQorICAgICAgICAgICAgc2V2ZXJhbCB2YXJpYWJsZXMuCisgICAgICAgIDwvc2ltcGFyYT48L3B1cnBvc2U+CisgICAgICAgIDxlZmZlY3RzPjxwcm9ncmFtbGlzdGluZz5zZWVkIF49IDxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2KSArIDB4OWUzNzc5YjkgKyAoc2VlZCAmbHQ7Jmx0OyA2KSArIChzZWVkICZndDsmZ3Q7IDIpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9lZmZlY3RzPgorICAgICAgICA8bm90ZXM+CisgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+IGlzIGNhbGxlZCB3aXRob3V0CisgICAgICAgICAgcXVhbGlmaWNhdGlvbiwgc28gdGhhdCBvdmVybG9hZHMgY2FuIGJlIGZvdW5kIHZpYSBBREwuPC9wYXJhPgorICAgICAgICAgIDxwYXJhPlRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIFRSMTwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvcndhcmQgZGVjbGFyZWQgaW4KKyAgICAgICAgICAgIDxjb2RlPiZsdDtib29zdC9mdW5jdGlvbmFsL2hhc2hfZndkLmhwcCZndDs8L2NvZGU+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGVzPgorICAgICAgICA8dGhyb3dzPgorICAgICAgICAgIE9ubHkgdGhyb3dzIGlmIDxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPihUKSB0aHJvd3MuCisgICAgICAgICAgU3Ryb25nIGV4Y2VwdGlvbiBzYWZldHksIGFzIGxvbmcgYXMgPGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KFQpCisgICAgICAgICAgYWxzbyBoYXMgc3Ryb25nIGV4Y2VwdGlvbiBzYWZldHkuCisgICAgICAgIDwvdGhyb3dzPgorICAgICAgPC9mdW5jdGlvbj4KKworICAgICAgPCEtLQorICAgICAgICBib29zdDo6aGFzaF9yYW5nZQorICAgICAgICAtLT4KKworICAgICAgPG92ZXJsb2FkZWQtZnVuY3Rpb24gbmFtZT0iaGFzaF9yYW5nZSI+CisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9Ikl0Ii8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImZpcnN0Ij48cGFyYW10eXBlPkl0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJsYXN0Ij48cGFyYW10eXBlPkl0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9Ikl0Ii8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT52b2lkPC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0ic2VlZCI+PHBhcmFtdHlwZT5zdGQ6OnNpemVfdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJmaXJzdCI+PHBhcmFtdHlwZT5JdDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0ibGFzdCI+PHBhcmFtdHlwZT5JdDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8cHVycG9zZT48c2ltcGFyYT4KKyAgICAgICAgICAgIENhbGN1bGF0ZSB0aGUgY29tYmluZWQgaGFzaCB2YWx1ZSBvZiB0aGUgZWxlbWVudHMgb2YgYW4gaXRlcmF0b3IKKyAgICAgICAgICAgIHJhbmdlLgorICAgICAgICA8L3NpbXBhcmE+PC9wdXJwb3NlPgorICAgICAgICA8ZWZmZWN0cz4KKyAgICAgICAgICA8cGFyYT5Gb3IgdGhlIHR3byBhcmd1bWVudCBvdmVybG9hZDoKKzxwcm9ncmFtbGlzdGluZz4KK3NpemVfdCBzZWVkID0gMDsKKworZm9yKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkKK3sKKyAgICA8ZnVuY3Rpb25uYW1lPmhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPihzZWVkLCAqZmlyc3QpOworfQorCityZXR1cm4gc2VlZDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPkZvciB0aGUgdGhyZWUgYXJndW1lbnRzIG92ZXJsb2FkOjwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK2Zvcig7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpCit7CisgICAgPGZ1bmN0aW9ubmFtZT5oYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4oc2VlZCwgKmZpcnN0KTsKK30KKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZWZmZWN0cz4KKyAgICAgICAgPG5vdGVzPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGNvZGU+aGFzaF9yYW5nZTwvY29kZT4gaXMgc2Vuc2l0aXZlIHRvIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMKKyAgICAgICAgICAgIHNvIGl0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlIHRvIHVzZSB0aGlzIHdpdGggYW4gdW5vcmRlcmVkCisgICAgICAgICAgICBjb250YWluZXIuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPlRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIFRSMTwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvcndhcmQgZGVjbGFyZWQgaW4KKyAgICAgICAgICAgIDxjb2RlPiZsdDtib29zdC9mdW5jdGlvbmFsL2hhc2hfZndkLmhwcCZndDs8L2NvZGU+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGVzPgorICAgICAgICA8dGhyb3dzPjxwYXJhPgorICAgICAgICAgIE9ubHkgdGhyb3dzIGlmIDxjb2RlPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPihzdGQ6Oml0ZXJhdG9yX3RyYWl0cyZsdDtJdCZndDs6OnZhbHVlX3R5cGUpPC9jb2RlPgorICAgICAgICAgIHRocm93cy4gPGNvZGU+aGFzaF9yYW5nZShzdGQ6OnNpemVfdCZhbXA7LCBJdCwgSXQpPC9jb2RlPiBoYXMgYmFzaWMgZXhjZXB0aW9uIHNhZmV0eSBhcyBsb25nIGFzCisgICAgICAgICAgPGNvZGU+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHN0ZDo6aXRlcmF0b3JfdHJhaXRzJmx0O0l0Jmd0Ozo6dmFsdWVfdHlwZSk8L2NvZGU+CisgICAgICAgICAgaGFzIGJhc2ljIGV4Y2VwdGlvbiBzYWZldHkuCisgICAgICAgIDwvcGFyYT48L3Rocm93cz4KKyAgICAgIDwvb3ZlcmxvYWRlZC1mdW5jdGlvbj4KKworICAgICAgPC9mcmVlLWZ1bmN0aW9uLWdyb3VwPgorCisgICAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJPdmVybG9hZGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiAoQm9vc3QgZXh0ZW5zaW9uKS4iPgorCisgICAgICA8IS0tCisgICAgICAgIGJvb3N0OjpoYXNoX3ZhbHVlIC0gaW50ZWdlcnMKKyAgICAgICAgLS0+CisKKyAgICAgIDxvdmVybG9hZGVkLWZ1bmN0aW9uIG5hbWU9Imhhc2hfdmFsdWUiPgorICAgICAgICA8cHVycG9zZT48c2ltcGFyYT4KKyAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoIGZ1bmN0aW9uLgorICAgICAgICA8L3NpbXBhcmE+PC9wdXJwb3NlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+Ym9vbDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmNoYXI8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zaWduZWQgY2hhcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnVuc2lnbmVkIGNoYXI8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT53Y2hhcl90PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c2hvcnQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT51bnNpZ25lZCBzaG9ydDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmludDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnVuc2lnbmVkIGludDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmxvbmc8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT51bnNpZ25lZCBsb25nPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+bG9uZyBsb25nPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+dW5zaWduZWQgbG9uZyBsb25nPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+ZmxvYXQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5kb3VibGU8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5sb25nIGRvdWJsZTwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT48dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPjwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+VCogY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtbm9udHlwZS1wYXJhbWV0ZXIgbmFtZT0iTiI+PHR5cGU+dW5zaWduZWQ8L3R5cGU+PC90ZW1wbGF0ZS1ub250eXBlLXBhcmFtZXRlcj4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXI+PHBhcmFtdHlwZT5UICgmYW1wO3ZhbClbTl08L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLW5vbnR5cGUtcGFyYW1ldGVyIG5hbWU9Ik4iPjx0eXBlPnVuc2lnbmVkPC90eXBlPjwvdGVtcGxhdGUtbm9udHlwZS1wYXJhbWV0ZXI+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyPjxwYXJhbXR5cGU+Y29uc3QgVCAoJmFtcDt2YWwpW05dPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkNoIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgICA8cGFyYW10eXBlPnN0ZDo6YmFzaWNfc3RyaW5nJmx0O0NoLCBzdGQ6OmNoYXJfdHJhaXRzJmx0O0NoJmd0OywgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKyAgICAgICAgICAgICAgCisgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkIiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6cGFpciZsdDtBLCBCJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OnZlY3RvciZsdDtULCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6Omxpc3QmbHQ7VCwgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjpkZXF1ZSZsdDtULCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IksiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJDIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjpzZXQmbHQ7SywgQywgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJLIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQyIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6bXVsdGlzZXQmbHQ7SywgQywgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJLIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkMiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6Om1hcCZsdDtLLCBULCBDLCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IksiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQyIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6bXVsdGltYXAmbHQ7SywgVCwgQywgQSZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OmNvbXBsZXgmbHQ7VCZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6dHlwZV9pbmRleDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtbm9udHlwZS1wYXJhbWV0ZXIgbmFtZT0iTiI+CisgICAgICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgICAgPC90ZW1wbGF0ZS1ub250eXBlLXBhcmFtZXRlcj4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6YXJyYXkmbHQ7VCwgTiZndDsgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIiBwYWNrPSIxIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OnR1cGxlJmx0O1QuLi4mZ3Q7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxkZXNjcmlwdGlvbj48cGFyYT4KKyAgICAgICAgICBHZW5lcmFsbHkgc2hvdWxkbid0IGJlIGNhbGxlZCBkaXJlY3RseSBieSB1c2VycywgaW5zdGVhZCB0aGV5IHNob3VsZCB1c2UKKyAgICAgICAgICA8Y2xhc3NuYW1lPmJvb3N0OjpoYXNoPC9jbGFzc25hbWU+LCA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpoYXNoX3JhbmdlPC9mdW5jdGlvbm5hbWU+CisgICAgICAgICAgb3IgPGZ1bmN0aW9ubmFtZT5ib29zdDo6aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+IHdoaWNoCisgICAgICAgICAgY2FsbCA8Y29kZT5oYXNoX3ZhbHVlPC9jb2RlPiB3aXRob3V0IG5hbWVzcGFjZSBxdWFsaWZpY2F0aW9uIHNvIHRoYXQgb3ZlcmxvYWRzCisgICAgICAgICAgZm9yIGN1c3RvbSB0eXBlcyBhcmUgZm91bmQgdmlhIEFETC4KKyAgICAgICAgPC9wYXJhPjwvZGVzY3JpcHRpb24+CisKKyAgICAgICAgPG5vdGVzPgorICAgICAgICAgIDxwYXJhPlRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIFRSMTwvcGFyYT4KKyAgICAgICAgPC9ub3Rlcz4KKworICAgICAgICA8dGhyb3dzPgorICAgICAgICAgICAgT25seSB0aHJvd3MgaWYgYSB1c2VyIHN1cHBsaWVkIHZlcnNpb24gb2YKKyAgICAgICAgICAgIDxjb2RlPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPjwvY29kZT4KKyAgICAgICAgICAgIHRocm93cyBmb3IgYW4gZWxlbWVudCBvZiBhIGNvbnRhaW5lciwgb3IKKyAgICAgICAgICAgIG9uZSBvZiB0aGUgdHlwZXMgc3RvcmVkIGluIGEgcGFpci4KKyAgICAgICAgPC90aHJvd3M+CisKKyAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgPGluZm9ybWFsdGFibGU+CisgICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjIiPgorICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5UeXBlczwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+UmV0dXJuczwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPmJvb2w8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5jaGFyPC9jb2RlPiwgPGNvZGU+c2lnbmVkIGNoYXI8L2NvZGU+LCA8Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPiwgPGNvZGU+d2NoYXJfdDwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnNob3J0PC9jb2RlPiwgPGNvZGU+dW5zaWduZWQgc2hvcnQ8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5pbnQ8L2NvZGU+LCA8Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+LCA8Y29kZT5sb25nPC9jb2RlPiwgPGNvZGU+dW5zaWduZWQgbG9uZzwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+dmFsPC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5sb25nIGxvbmc8L2NvZGU+LCA8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT52YWw8L2NvZGU+IHdoZW4gPGNvZGU+YWJzKHZhbCkgJmx0Oz0gc3RkOjpudW1lcmljX2xpbWl0cyZsdDtzdGQ6OnNpemVfdCZndDs6Om1heCgpPC9jb2RlPi48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+ZmxvYXQ8L2NvZGU+LCA8Y29kZT5kb3VibGU8L2NvZGU+LCA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkFuIHVuc3BlY2lmaWVkIHZhbHVlLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgc2hhbGwgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5UKjwvY29kZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkFuIHVuc3BlY2lmaWVkIHZhbHVlLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgc2hhbGwgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+VCYjMTYwO3ZhbFtOXTwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPmNvbnN0JiMxNjA7VCYjMTYwO3ZhbFtOXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+aGFzaF9yYW5nZSh2YWwsIHZhbCtOKTwvY29kZT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDpiYXNpY19zdHJpbmcmbHQ7Q2gsJiMxNjA7c3RkOjpjaGFyX3RyYWl0cyZsdDtDaCZndDssJiMxNjA7QSZndDs8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6OnZlY3RvciZsdDtULCYjMTYwO0EmZ3Q7PC9jb2RlPiwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjpsaXN0Jmx0O1QsJiMxNjA7QSZndDs8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6OmRlcXVlJmx0O1QsJiMxNjA7QSZndDs8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6OnNldCZsdDtLLCYjMTYwO0MsJiMxNjA7QSZndDs8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6Om11bHRpc2V0Jmx0O0ssJiMxNjA7QywmIzE2MDtBJmd0OzwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6bWFwJmx0O0ssJiMxNjA7VCwmIzE2MDtDLCYjMTYwO0EmZ3Q7PC9jb2RlPiwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjptdWx0aW1hcCZsdDtLLCYjMTYwO1QsJiMxNjA7QywmIzE2MDtBJmd0OzwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6YXJyYXkmbHQ7VCwmIzE2MDtOJmd0OzwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+aGFzaF9yYW5nZSh2YWwuYmVnaW4oKSwgdmFsLmVuZCgpKTwvY29kZT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+c3RkOjpwYWlyJmx0O0EsIEImZ3Q7PC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PHByb2dyYW1saXN0aW5nPnNpemVfdCBzZWVkID0gMDsKKzxmdW5jdGlvbm5hbWU+aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+KHNlZWQsIHZhbC5maXJzdCk7Cis8ZnVuY3Rpb25uYW1lPmhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPihzZWVkLCB2YWwuc2Vjb25kKTsKK3JldHVybiBzZWVkOzwvcHJvZ3JhbWxpc3Rpbmc+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPnN0ZDo6dHVwbGUmbHQ7VC4uLiZndDs8L2NvZGU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48cHJvZ3JhbWxpc3Rpbmc+c2l6ZV90IHNlZWQgPSAwOworPGZ1bmN0aW9ubmFtZT5oYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4oc2VlZCwgZ2V0Jmx0OzAmZ3Q7KHZhbCkpOworPGZ1bmN0aW9ubmFtZT5oYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4oc2VlZCwgZ2V0Jmx0OzEmZ3Q7KHZhbCkpOworLy8gLi4uLgorcmV0dXJuIHNlZWQ7PC9wcm9ncmFtbGlzdGluZz48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6Y29tcGxleCZsdDtUJmd0OzwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+V2hlbiA8Y29kZT5UPC9jb2RlPiBpcyBhIGJ1aWx0IGluIHR5cGUgYW5kIDxjb2RlPnZhbC5pbWFnKCkgPT0gMDwvY29kZT4sIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gPGNvZGU+aGFzaF92YWx1ZSh2YWwucmVhbCgpKTwvY29kZT4uIE90aGVyd2lzZSBhbiB1bnNwZWNpZmllZCB2YWx1ZSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHNoYWxsIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6dHlwZV9pbmRleDwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+dmFsLmhhc2hfY29kZSgpPC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgIDwvcmV0dXJucz4KKyAgICAgIDwvb3ZlcmxvYWRlZC1mdW5jdGlvbj4KKyAgICAgIDwvZnJlZS1mdW5jdGlvbi1ncm91cD4KKyAgICA8L25hbWVzcGFjZT4KKyAgPC9oZWFkZXI+Cis8L2xpYnJhcnktcmVmZXJlbmNlPgorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdGhhbmtzLnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy90aGFua3MucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzUxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdGhhbmtzLnFiawpAQCAtMCwwICsxLDI4IEBACisKK1svIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgorIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KKworW3NlY3Rpb246YWNrbm93bGVkZ2VtZW50cyBBY2tub3dsZWRnZW1lbnRzXQorCitUaGlzIGxpYnJhcnkgaXMgYmFzZWQgb24gdGhlIGRlc2lnbiBieSBQZXRlciBEaW1vdi4gRHVyaW5nIHRoZSBpbml0aWFsCitkZXZlbG9wbWVudAorSm9hcXXDrW4gTSBMw7NwZXogTXXDsW96IG1hZGUgbWFueSB1c2VmdWwgc3VnZ2VzdGlvbnMgYW5kIGNvbnRyaWJ1dGVkIGZpeGVzLgorCitUaGUgZm9ybWFsIHJldmlldyB3YXMgbWFuYWdlZCBieSBUaG9yc3RlbiBPdHRvc2VuLCBhbmQgdGhlIGxpYnJhcnkgcmV2aWV3ZWQgYnk6CitEYXZpZCBBYnJhaGFtcywgQWxiZXJ0byBCYXJiYXRpLCBUb3BoZXIgQ29vcGVyLCBDYWxlYiBFcHN0ZWluLCBEYXZlIEhhcnJpcywKK0NocmlzIEplZmZlcnNvbiwgQnJvbmVrIEtvemlja2ksIEpvaG4gTWFkZG9jaywgVG9iaWFzIFN3aW5nZXIsIEphYXAgU3V0ZXIsCitSb2IgU3Rld2FydCBhbmQgUGF2ZWwgVm96ZW5pbGVrLiBTaW5jZSB0aGVuLCBmdXJ0aGVyIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20gaGFzCitiZWVuIG1hZGUgYnkgRGFuaWVsIEtyw7xnbGVyLCBBbGV4YW5kZXIgTmFzb25vdiBhbmQg5rKI5oWn5bOwLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2ggZnVuY3Rpb24gZm9yIHBvaW50ZXJzIGlzIGJhc2VkIG9uIHN1Z2dlc3Rpb25zCittYWRlIGJ5IEFsYmVydG8gQmFyYmF0aSBhbmQgRGF2ZSBIYXJyaXMuIERhdmUgSGFycmlzIGFsc28gc3VnZ2VzdGVkIGFuCitpbXBvcnRhbnQgaW1wcm92ZW1lbnQgdG8gW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfY29tYmluZV0gdGhhdCB3YXMgdGFrZW4gdXAuCisKK1NvbWUgdXNlZnVsIGltcHJvdmVtZW50cyB0byB0aGUgZmxvYXRpbmcgcG9pbnQgaGFzaCBhbGdvcml0aG0gd2VyZSBzdWdnZXN0ZWQKK2J5IERhbmllbCBLcsO8Z2xlci4KKworVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbWUgZnJvbSBKZXJlbXkgQi4gTWFpdGluLVNoZXBhcmQncyBoYXNoIHRhYmxlCitsaWJyYXJ5LCBhbHRob3VnaCB0aGlzIGlzIGEgY29tcGxldGUgcmV3cml0ZS4KKworW2VuZHNlY3RdCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdHV0b3JpYWwucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3R1dG9yaWFsLnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA2N2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3R1dG9yaWFsLnFiawpAQCAtMCwwICsxLDIxMiBAQAorCitbLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KKyAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCisKK1tkZWYgX19tdWx0aS1pbmRleC1zaG9ydF9fIFtAYm9vc3Q6L2xpYnMvbXVsdGlfaW5kZXgvZG9jL2luZGV4Lmh0bWwKKyAgICBCb29zdC5NdWx0aUluZGV4XV0KKworW3NlY3Rpb246dHV0b3JpYWwgVHV0b3JpYWxdCisKK1doZW4gdXNpbmcgYSBoYXNoIGluZGV4IHdpdGggX19tdWx0aS1pbmRleC1zaG9ydF9fLCB5b3UgZG9uJ3QgbmVlZCB0byBkbworYW55dGhpbmcgdG8gdXNlIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gYXMgaXQgdXNlcyBpdCBieSBkZWZhdWx0LgorVG8gZmluZCBvdXQgaG93IHRvIHVzZSBhIHVzZXItZGVmaW5lZCB0eXBlLCByZWFkIHRoZQorW2xpbmsgaGFzaC5jdXN0b20gc2VjdGlvbiBvbiBleHRlbmRpbmcgYm9vc3Q6Omhhc2ggZm9yIGEgY3VzdG9tIGRhdGEgdHlwZV0uCisKK0lmIHlvdXIgc3RhbmRhcmQgbGlicmFyeSBzdXBwbGllcyBpdHMgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoZSB1bm9yZGVyZWQKK2Fzc29jaWF0aXZlIGNvbnRhaW5lcnMgYW5kIHlvdSB3aXNoIHRvIHVzZQorW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSwganVzdCB1c2UgYW4gZXh0cmEgdGVtcGxhdGUgcGFyYW1ldGVyOgorCisgICAgc3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQ8aW50LCBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDxpbnQ+ID4KKyAgICAgICAgICAgIHNldF9vZl9pbnRzOworCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6cGFpcjxpbnQsIGludD4sIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPHN0ZDo6cGFpcjxpbnQsIGludD4gPgorICAgICAgICAgICAgc2V0X29mX3BhaXJzOworCisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGludCwgc3RkOjpzdHJpbmcsIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPGludD4gPiBtYXBfaW50X3RvX3N0cmluZzsKKworVG8gdXNlIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gZGlyZWN0bHksIGNyZWF0ZSBhbiBpbnN0YW5jZSBhbmQgY2FsbCBpdCBhcyBhIGZ1bmN0aW9uOgorCisgICAgI2luY2x1ZGUgPGBgW2hlYWRlcnJlZiBib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwXWBgPgorCisgICAgaW50IG1haW4oKQorICAgIHsKKyAgICAgICAgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8c3RkOjpzdHJpbmc+IHN0cmluZ19oYXNoOworCisgICAgICAgIHN0ZDo6c2l6ZV90IGggPSBzdHJpbmdfaGFzaCgiSGFzaCBtZSIpOworICAgIH0KKworRm9yIGFuIGV4YW1wbGUgb2YgZ2VuZXJpYyB1c2UsIGhlcmUgaXMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHZlY3RvcgorY29udGFpbmluZyB0aGUgaGFzaGVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIGNvbnRhaW5lcjoKKworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IGdldF9oYXNoZXMoQ29udGFpbmVyIGNvbnN0JiB4KQorICAgIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IGhhc2hlczsKKyAgICAgICAgc3RkOjp0cmFuc2Zvcm0oeC5iZWdpbigpLCB4LmVuZCgpLCBzdGQ6Omluc2VydF9pdGVyYXRvcihoYXNoZXMpLAorICAgICAgICAgICAgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPigpKTsKKworICAgICAgICByZXR1cm4gaGFzaGVzOworICAgIH0KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uOmN1c3RvbSBFeHRlbmRpbmcgYm9vc3Q6Omhhc2ggZm9yIGEgY3VzdG9tIGRhdGEgdHlwZV0KKworW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbgorW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfdmFsdWUgaGFzaF92YWx1ZV0uCitUaGUgbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBzbyB0aGF0IGl0IGNhbiBkZXRlY3Qgb3ZlcmxvYWRzIHZpYSBhcmd1bWVudAorZGVwZW5kYW50IGxvb2t1cC4gU28gaWYgdGhlcmUgaXMgYSBmcmVlIGZ1bmN0aW9uIGBoYXNoX3ZhbHVlYCBpbiB0aGUgc2FtZQorbmFtZXNwYWNlIGFzIGEgY3VzdG9tIHR5cGUsIGl0IHdpbGwgZ2V0IGNhbGxlZC4KKworSWYgeW91IGhhdmUgYSBzdHJ1Y3R1cmUgYGxpYnJhcnk6OmJvb2tgLCB3aGVyZSBlYWNoIGBib29rYCBpcyB1bmlxdWVseQorZGVmaW5lZCBieSBpdCdzIG1lbWJlciBgaWRgOgorCisgICAgbmFtZXNwYWNlIGxpYnJhcnkKKyAgICB7CisgICAgICAgIHN0cnVjdCBib29rCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpZDsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGF1dGhvcjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRpdGxlOworCisgICAgICAgICAgICAvLyAuLi4uCisgICAgICAgIH07CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGJvb2sgY29uc3QmIGEsIGJvb2sgY29uc3QmIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhLmlkID09IGIuaWQ7CisgICAgICAgIH0KKyAgICB9CisKK1RoZW4gYWxsIHlvdSB3b3VsZCBuZWVkIHRvIGRvIGlzIHdyaXRlIHRoZSBmdW5jdGlvbiBgbGlicmFyeTo6aGFzaF92YWx1ZWA6CisKKyAgICBuYW1lc3BhY2UgbGlicmFyeQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShib29rIGNvbnN0JiBiKQorICAgICAgICB7CisgICAgICAgICAgICBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDxpbnQ+IGhhc2hlcjsKKyAgICAgICAgICAgIHJldHVybiBoYXNoZXIoYi5pZCk7CisgICAgICAgIH0KKyAgICB9CisKK0FuZCB5b3UgY2FuIG5vdyB1c2UgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSB3aXRoIGJvb2s6CisKKyAgICBsaWJyYXJ5Ojpib29rIGtuaWZlKDM0NTgsICJaYW5lIEdyZXkiLCAiVGhlIEhhc2ggS25pZmUgT3V0Zml0Iik7CisgICAgbGlicmFyeTo6Ym9vayBkYW5kZWxpb24oMTM1NCwgIlBhdWwgSi4gU2hhbmxleSIsCisgICAgICAgICJIYXNoICYgRGFuZGVsaW9uIEdyZWVucyIpOworCisgICAgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8bGlicmFyeTo6Ym9vaz4gYm9va19oYXNoZXI7CisgICAgc3RkOjpzaXplX3Qga25pZmVfaGFzaF92YWx1ZSA9IGJvb2tfaGFzaGVyKGtuaWZlKTsKKworICAgIC8vIElmIHN0ZDo6dW5vcmRlcmVkX3NldCBpcyBhdmFpbGFibGU6CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGxpYnJhcnk6OmJvb2ssIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPGxpYnJhcnk6OmJvb2s+ID4gYm9va3M7CisgICAgYm9va3MuaW5zZXJ0KGtuaWZlKTsKKyAgICBib29rcy5pbnNlcnQobGlicmFyeTo6Ym9vaygyNDQzLCAiTGluZGdyZW4sIFRvcmdueSIsICJIYXNoIikpOworICAgIGJvb2tzLmluc2VydChsaWJyYXJ5Ojpib29rKDE5NTMsICJTbnlkZXIsIEJlcm5hZGV0dGUgTS4iLAorICAgICAgICAiSGVhdmVubHkgSGFzaDogQSBUYXN0eSBNaXggb2YgYSBNb3RoZXIncyBNZWRpdGF0aW9ucyIpKTsKKworICAgIGFzc2VydChib29rcy5maW5kKGtuaWZlKSAhPSBib29rcy5lbmQoKSk7CisgICAgYXNzZXJ0KGJvb2tzLmZpbmQoZGFuZGVsaW9uKSA9PSBib29rcy5lbmQoKSk7CisKK1RoZSBmdWxsIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluOgorW0Bib29zdDovbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuaHBwIC9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHBdCithbmQKK1tAYm9vc3Q6L2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmNwcCAvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuY3BwXS4KKworW3RpcAorV2hlbiB3cml0aW5nIGEgaGFzaCBmdW5jdGlvbiwgZmlyc3QgbG9vayBhdCBob3cgdGhlIGVxdWFsaXR5IGZ1bmN0aW9uIHdvcmtzLgorT2JqZWN0cyB0aGF0IGFyZSBlcXVhbCBtdXN0IGdlbmVyYXRlIHRoZSBzYW1lIGhhc2ggdmFsdWUuCitXaGVuIG9iamVjdHMgYXJlIG5vdCBlcXVhbCB0aGV5IHNob3VsZCBnZW5lcmF0ZSBkaWZmZXJlbnQgaGFzaCB2YWx1ZXMuCitJbiB0aGlzIG9iamVjdCBlcXVhbGl0eSB3YXMgYmFzZWQganVzdCBvbiB0aGUgaWQgc28gdGhlIGhhc2ggZnVuY3Rpb24KK29ubHkgaGFzaGVzIHRoZSBpZC4gSWYgaXQgd2FzIGJhc2VkIG9uIHRoZSBvYmplY3QncyBuYW1lIGFuZCBhdXRob3IKK3RoZW4gdGhlIGhhc2ggZnVuY3Rpb24gc2hvdWxkIHRha2UgdGhlbSBpbnRvIGFjY291bnQKKyhob3cgdG8gZG8gdGhpcyBpcyBkaXNjdXNzZWQgaW4gdGhlIG5leHQgc2VjdGlvbikuCitdCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbjpjb21iaW5lIENvbWJpbmluZyBoYXNoIHZhbHVlc10KKworU2F5IHlvdSBoYXZlIGEgcG9pbnQgY2xhc3MsIHJlcHJlc2VudGluZyBhIHR3byBkaW1lbnNpb25hbCBsb2NhdGlvbjoKKworICAgIGNsYXNzIHBvaW50CisgICAgeworICAgICAgICBpbnQgeDsKKyAgICAgICAgaW50IHk7CisgICAgcHVibGljOgorICAgICAgICBwb2ludCgpIDogeCgwKSwgeSgwKSB7fQorICAgICAgICBwb2ludChpbnQgeCwgaW50IHkpIDogeCh4KSwgeSh5KSB7fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShwb2ludCBjb25zdCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4ID09IG90aGVyLnggJiYgeSA9PSBvdGhlci55OworICAgICAgICB9CisgICAgfTsKKworYW5kIHlvdSB3aXNoIHRvIHVzZSBpdCBhcyB0aGUga2V5IGZvciBhbiBgdW5vcmRlcmVkX21hcGAuIFlvdSBuZWVkIHRvCitjdXN0b21pc2UgdGhlIGhhc2ggZm9yIHRoaXMgc3RydWN0dXJlLiBUbyBkbyB0aGlzIHdlIG5lZWQgdG8gY29tYmluZQordGhlIGhhc2ggdmFsdWVzIGZvciBgeGAgYW5kIGB5YC4gVGhlIGZ1bmN0aW9uCitbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXSBpcyBzdXBwbGllZCBmb3IgdGhpcyBwdXJwb3NlOgorCisgICAgY2xhc3MgcG9pbnQKKyAgICB7CisgICAgICAgIC4uLgorCisgICAgICAgIGZyaWVuZCBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHBvaW50IGNvbnN0JiBwKQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICAgICAgICAgIGBgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfY29tYmluZV1gYChzZWVkLCBwLngpOworICAgICAgICAgICAgYGBbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXWBgKHNlZWQsIHAueSk7CisKKyAgICAgICAgICAgIHJldHVybiBzZWVkOworICAgICAgICB9CisKKyAgICAgICAgLi4uCisgICAgfTsKKworQ2FsbHMgdG8gaGFzaF9jb21iaW5lIGluY3JlbWVudGFsbHkgYnVpbGQgdGhlIGhhc2ggZnJvbSB0aGUgZGlmZmVyZW50IG1lbWJlcnMKK29mIHBvaW50LCBpdCBjYW4gYmUgcmVwZWF0ZWRseSBjYWxsZWQgZm9yIGFueSBudW1iZXIgb2YgZWxlbWVudHMuIEl0IGNhbGxzCitbZnVuY3JlZiBib29zdDo6aGFzaF92YWx1ZSBoYXNoX3ZhbHVlXSBvbiB0aGUgc3VwcGxpZWQgZWxlbWVudCwgYW5kIGNvbWJpbmVzIGl0IHdpdGggdGhlIHNlZWQuCisKK0Z1bGwgY29kZSBmb3IgdGhpcyBleGFtcGxlIGlzIGF0CitbQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb2ludC5jcHAgL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvaW50LmNwcF0uCisKK1tub3RlCitXaGVuIHVzaW5nIFtmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdIHRoZSBvcmRlciBvZiB0aGUKK2NhbGxzIG1hdHRlcnMuCisnJycKKzxwcm9ncmFtbGlzdGluZz4KKyAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICBib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIDEpOworICAgIGJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgMik7Cis8L3Byb2dyYW1saXN0aW5nPgorcmVzdWx0cyBpbiBhIGRpZmZlcmVudCBzZWVkIHRvOgorPHByb2dyYW1saXN0aW5nPgorICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgIGJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgMik7CisgICAgYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCAxKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisnJycKK0lmIHlvdSBhcmUgY2FsY3VsYXRpbmcgYSBoYXNoIHZhbHVlIGZvciBkYXRhIHdoZXJlIHRoZSBvcmRlciBvZiB0aGUgZGF0YQorZG9lc24ndCBtYXR0ZXIgaW4gY29tcGFyaXNvbnMgKGUuZy4gYSBzZXQpIHlvdSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlCitkYXRhIGlzIGFsd2F5cyBzdXBwbGllZCBpbiB0aGUgc2FtZSBvcmRlci4KK10KKworVG8gY2FsY3VsYXRlIHRoZSBoYXNoIG9mIGFuIGl0ZXJhdG9yIHJhbmdlIHlvdSBjYW4gdXNlIFtmdW5jcmVmIGJvb3N0OjpoYXNoX3JhbmdlXToKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb21lX3N0cmluZ3M7CisgICAgc3RkOjpzaXplX3QgaGFzaCA9IGBgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfcmFuZ2VdYGAoc29tZV9zdHJpbmdzLmJlZ2luKCksIHNvbWVfc3RyaW5ncy5lbmQoKSk7CisKK05vdGUgdGhhdCB3aGVuIHdyaXRpbmcgdGVtcGxhdGUgY2xhc3NlcywgeW91IG1pZ2h0IG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlIG1haW4KK2hhc2ggaGVhZGVyIGFzIGl0J3MgcXVpdGUgYW4gZXhwZW5zaXZlIGluY2x1ZGUgdGhhdCBicmluZ3MgaW4gYSBsb3Qgb2Ygb3RoZXIKK2hlYWRlcnMsIHNvIGluc3RlYWQgeW91IGNhbiBpbmNsdWRlIHRoZSBgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwPmAKK2hlYWRlciB3aGljaCBmb3J3YXJkIGRlY2xhcmVzIFtjbGFzc3JlZiBib29zdDo6aGFzaF0sCitbZnVuY3JlZiBib29zdDo6aGFzaF9yYW5nZV0gYW5kIFtmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdLiBZb3UnbGwgbmVlZCB0bworaW5jbHVkZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGluc3RhbnRpYXRpbmcgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXS4gV2hlbiB1c2luZworYSBjb250YWluZXIgdGhhdCB1c2VzIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gaXQgc2hvdWxkIGRvIHRoYXQgZm9yIHlvdSwgc28geW91cgordHlwZSB3aWxsIHdvcmsgZmluZSB3aXRoIHRoZSBib29zdCBoYXNoIGNvbnRhaW5lcnMuIFRoZXJlJ3MgYW4gZXhhbXBsZSBvZiB0aGlzCitpbiBbQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy90ZW1wbGF0ZS5ocHAgdGVtcGxhdGUuaHBwXSBhbmQKK1tAYm9vc3Q6L2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmNwcCB0ZW1wbGF0ZS5jcHBdLgorCitbZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9KYW1maWxlLnYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTE2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9KYW1maWxlLnYyCkBAIC0wLDAgKzEsOSBAQAorCisjIENvcHlyaWdodCBEYW5pZWwgSmFtZXMgMjAwNS4gVXNlLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0cmlidXRpb24gYXJlCisjIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworcnVuIGJvb2tzLmNwcCA7CitydW4gcG9pbnQuY3BwIDsKK3J1biBwb3J0YWJsZS5jcHAgOworcnVuIHRlbXBsYXRlLmNwcCA7CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMmUwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmNwcApAQCAtMCwwICsxLDUxIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2Jvb2tzLmhwcCIKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisKKy8vIElmIHN0ZDo6dW5vcmRlcmVkX3NldCB3YXMgYXZhaWxhYmxlOgorLy8jaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworLy8gVGhpcyBleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyB0byB1c2UgbmRuYm9vc3Q6Omhhc2ggd2l0aCBhIGN1c3RvbSBoYXNoIGZ1bmN0aW9uLgorLy8gRm9yIGZ1bGwgZGV0YWlscywgc2VlIHRoZSB0dXRvcmlhbC4KKworaW50IG1haW4oKQoreworICAgIGxpYnJhcnk6OmJvb2sga25pZmUoMzQ1OCwgIlphbmUgR3JleSIsICJUaGUgSGFzaCBLbmlmZSBPdXRmaXQiKTsKKyAgICBsaWJyYXJ5Ojpib29rIGRhbmRlbGlvbigxMzU0LCAiUGF1bCBKLiBTaGFubGV5IiwgIkhhc2ggJiBEYW5kZWxpb24gR3JlZW5zIik7CisKKyAgICBuZG5ib29zdDo6aGFzaDxsaWJyYXJ5Ojpib29rPiBib29rX2hhc2hlcjsKKyAgICBzdGQ6OnNpemVfdCBrbmlmZV9oYXNoX3ZhbHVlID0gYm9va19oYXNoZXIoa25pZmUpOworICAgICh2b2lkKWtuaWZlX2hhc2hfdmFsdWU7IC8vIHN1cHByZXNzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nCisKKyAgICAvLyBJZiBzdGQ6OnVub3JkZXJlZF9zZXQgd2FzIGF2YWlsYWJsZToKKyAgICAvLworICAgIC8vc3RkOjp1bm9yZGVyZWRfc2V0PGxpYnJhcnk6OmJvb2ssIG5kbmJvb3N0OjpoYXNoPGxpYnJhcnk6OmJvb2s+ID4gYm9va3M7CisgICAgLy9ib29rcy5pbnNlcnQoa25pZmUpOworICAgIC8vYm9va3MuaW5zZXJ0KGxpYnJhcnk6OmJvb2soMjQ0MywgIkxpbmRncmVuLCBUb3JnbnkiLCAiSGFzaCIpKTsKKyAgICAvL2Jvb2tzLmluc2VydChsaWJyYXJ5Ojpib29rKDE5NTMsICJTbnlkZXIsIEJlcm5hZGV0dGUgTS4iLAorICAgIC8vICAgICJIZWF2ZW5seSBIYXNoOiBBIFRhc3R5IE1peCBvZiBhIE1vdGhlcidzIE1lZGl0YXRpb25zIikpOworCisgICAgLy9hc3NlcnQoYm9va3MuZmluZChrbmlmZSkgIT0gYm9va3MuZW5kKCkpOworICAgIC8vYXNzZXJ0KGJvb2tzLmZpbmQoZGFuZGVsaW9uKSA9PSBib29rcy5lbmQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworbmFtZXNwYWNlIGxpYnJhcnkKK3sKKyAgICBib29sIG9wZXJhdG9yPT0oYm9vayBjb25zdCYgYSwgYm9vayBjb25zdCYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmlkID09IGIuaWQ7CisgICAgfQorCisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShib29rIGNvbnN0JiBiKQorICAgIHsKKyAgICAgICAgbmRuYm9vc3Q6Omhhc2g8aW50PiBoYXNoZXI7CisgICAgICAgIHJldHVybiBoYXNoZXIoYi5pZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NWE3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHAKQEAgLTAsMCArMSwyNiBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBuZG5ib29zdDo6aGFzaCB3aXRoIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24uCisvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIGluIGJvb2tzLmNwcAorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBsaWJyYXJ5Cit7CisgICAgc3RydWN0IGJvb2sKKyAgICB7CisgICAgICAgIGludCBpZDsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXV0aG9yOworICAgICAgICBzdGQ6OnN0cmluZyB0aXRsZTsKKworICAgICAgICBib29rKGludCBpLCBzdGQ6OnN0cmluZyBjb25zdCYgYSwgc3RkOjpzdHJpbmcgY29uc3QmIHQpCisgICAgICAgICAgICA6IGlkKGkpLCBhdXRob3IoYSksIHRpdGxlKHQpIHt9CisgICAgfTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShib29rIGNvbnN0JiwgYm9vayBjb25zdCYpOworICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoYm9vayBjb25zdCYpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9pbnQuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNmUzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb2ludC5jcHAKQEAgLTAsMCArMSw1NCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKworLy8gVGhpcyBleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyB0byB1c2UgbmRuYm9vc3Q6Omhhc2hfY29tYmluZSB0byBnZW5lcmF0ZSBhIGhhc2gKKy8vIHZhbHVlIGZyb20gdGhlIGRpZmZlcmVudCBtZW1iZXJzIG9mIGEgY2xhc3MuIEZvciBmdWxsIGRldGFpbHMgc2VlIHRoZSBoYXNoCisvLyB0dXRvcmlhbC4KKworY2xhc3MgcG9pbnQKK3sKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKK3B1YmxpYzoKKyAgICBwb2ludCgpIDogeCgwKSwgeSgwKSB7fQorICAgIHBvaW50KGludCB4LCBpbnQgeSkgOiB4KHgpLCB5KHkpIHt9CisKKyAgICBib29sIG9wZXJhdG9yPT0ocG9pbnQgY29uc3QmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHggPT0gb3RoZXIueCAmJiB5ID09IG90aGVyLnk7CisgICAgfQorCisgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUocG9pbnQgY29uc3QmIHApCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICAgICAgbmRuYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCBwLngpOworICAgICAgICBuZG5ib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIHAueSk7CisKKyAgICAgICAgcmV0dXJuIHNlZWQ7CisgICAgfQorfTsKKworaW50IG1haW4oKQoreworICAgIG5kbmJvb3N0OjpoYXNoPHBvaW50PiBwb2ludF9oYXNoZXI7CisKKyAgICBwb2ludCBwMSgwLCAwKTsKKyAgICBwb2ludCBwMigxLCAyKTsKKyAgICBwb2ludCBwMyg0LCAxKTsKKyAgICBwb2ludCBwNCA9IHAxOworCisgICAgYXNzZXJ0KHBvaW50X2hhc2hlcihwMSkgPT0gcG9pbnRfaGFzaGVyKHA0KSk7CisKKyAgICAvLyBUaGVzZSB0ZXN0cyBjb3VsZCBsZWdhbGx5IGZhaWwsIGJ1dCBpZiB0aGV5IGRpZCBpdCdkIGJlIGEgcHJldHR5IGJhZAorICAgIC8vIGhhc2ggZnVuY3Rpb24uCisgICAgYXNzZXJ0KHBvaW50X2hhc2hlcihwMSkgIT0gcG9pbnRfaGFzaGVyKHAyKSk7CisgICAgYXNzZXJ0KHBvaW50X2hhc2hlcihwMSkgIT0gcG9pbnRfaGFzaGVyKHAzKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9ydGFibGUuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9ydGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjJlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHAKQEAgLTAsMCArMSw1NCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCisvLyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIGN1c3RvbWlzZSBuZG5ib29zdDo6aGFzaCBwb3J0YWJseSwgc28gdGhhdAorLy8gaXQnbGwgd29yayBvbiBib3RoIGNvbXBpbGVycyB0aGF0IGRvbid0IGltcGxlbWVudCBhcmd1bWVudCBkZXBlbmRlbnQgbG9va3VwCisvLyBhbmQgY29tcGlsZXJzIHRoYXQgaW1wbGVtZW50IHN0cmljdCB0d28tcGhhc2UgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4KKworbmFtZXNwYWNlIGZvbworeworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIGNsYXNzIGN1c3RvbV90eXBlCisgICAgeworICAgICAgICBUIHZhbHVlOworICAgIHB1YmxpYzoKKyAgICAgICAgY3VzdG9tX3R5cGUoVCB4KSA6IHZhbHVlKHgpIHt9CisKKyAgICAgICAgc3RkOjpzaXplX3QgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoPFQ+IGhhc2hlcjsKKyAgICAgICAgICAgIHJldHVybiBoYXNoZXIodmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKworI2lmZGVmIEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVAKK25hbWVzcGFjZSBuZG5ib29zdAorI2Vsc2UKK25hbWVzcGFjZSBmb28KKyNlbmRpZgoreworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoZm9vOjpjdXN0b21fdHlwZTxUPiB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgIH0KK30KKworaW50IG1haW4oKQoreworICAgIGZvbzo6Y3VzdG9tX3R5cGU8aW50PiB4KDEpLCB5KDIpLCB6KDEpOworCisgICAgbmRuYm9vc3Q6Omhhc2g8Zm9vOjpjdXN0b21fdHlwZTxpbnQ+ID4gaGFzaGVyOworCisgICAgYXNzZXJ0KGhhc2hlcih4KSA9PSBoYXNoZXIoeCkpOworICAgIGFzc2VydChoYXNoZXIoeCkgIT0gaGFzaGVyKHkpKTsKKyAgICBhc3NlcnQoaGFzaGVyKHgpID09IGhhc2hlcih6KSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNThlZjVjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuY3BwCkBAIC0wLDAgKzEsMTggQEAKKworLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICJ0ZW1wbGF0ZS5ocHAiCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxib29zdC91bm9yZGVyZWRfc2V0LmhwcD4KKworaW50IG1haW4oKQoreworICAgIHR5cGVkZWYgbXlfcGFpcjxpbnQsIGZsb2F0PiBwYWlyOworICAgIG5kbmJvb3N0Ojp1bm9yZGVyZWRfc2V0PHBhaXI+IHBhaXJfc2V0OworICAgIHBhaXJfc2V0LmVtcGxhY2UoMTAsIDAuNWYpOworCisgICAgYXNzZXJ0KHBhaXJfc2V0LmZpbmQocGFpcigxMCwgMC41ZikpICE9IHBhaXJfc2V0LmVuZCgpKTsKKyAgICBhc3NlcnQocGFpcl9zZXQuZmluZChwYWlyKDEwLCAwLjZmKSkgPT0gcGFpcl9zZXQuZW5kKCkpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MTdhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy90ZW1wbGF0ZS5ocHAKQEAgLTAsMCArMSwzNiBAQAorCisvLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gVGhpcyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byB3cml0ZSBhIGhhc2ggZnVuY3Rpb24gZm9yIGEgdGVtcGxhdGUKKy8vIGNsYXNzLgorCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoX2Z3ZC5ocHA+CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgorY2xhc3MgbXlfcGFpcgoreworICAgIEEgdmFsdWUxOworICAgIEIgdmFsdWUyOworcHVibGljOgorICAgIG15X3BhaXIoQSBjb25zdCYgdjEsIEIgY29uc3QmIHYyKQorICAgICAgICA6IHZhbHVlMSh2MSksIHZhbHVlMih2MikKKyAgICB7fQorCisgICAgYm9vbCBvcGVyYXRvcj09KG15X3BhaXIgY29uc3QmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlMSA9PSBvdGhlci52YWx1ZTEgJiYKKyAgICAgICAgICAgIHZhbHVlMiA9PSBvdGhlci52YWx1ZTI7CisgICAgfQorCisgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUobXlfcGFpciBjb25zdCYgcCkKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgICAgICBuZG5ib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIHAudmFsdWUxKTsKKyAgICAgICAgbmRuYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCBwLnZhbHVlMik7CisKKyAgICAgICAgcmV0dXJuIHNlZWQ7CisgICAgfQorfTsKKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvaW5kZXguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNTc1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNiBAQAorCis8IS0tCitDb3B5cmlnaHQgMjAwNS0yMDA3IERhbmllbCBKYW1lcy4KK0Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKK2ZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLS0+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgVVJMPS4uLy4uLy4uL2RvYy9odG1sL2hhc2guaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KK0F1dG9tYXRpYyByZWRpcmVjdGlvbiBmYWlsZWQsIHBsZWFzZSBnbyB0bworPGEgaHJlZj0iLi4vLi4vLi4vZG9jL2h0bWwvaGFzaC5odG1sIj4uLi8uLi8uLi9kb2MvaHRtbC9oYXNoLmh0bWw8L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjc2N2JmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvSmFtZmlsZS52MgpAQCAtMCwwICsxLDgxIEBACisKKyMgQ29weXJpZ2h0IDIwMDUtMjAxMiBEYW5pZWwgSmFtZXMuCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKK2ltcG9ydCB0ZXN0aW5nIDsKKworcHJvamVjdCBoYXNoLXRlc3RzCisgICAgOiByZXF1aXJlbWVudHMKKyAgICAgICAgPHdhcm5pbmdzPmFsbAorICAgICAgICA8dG9vbHNldD5pbnRlbDo8d2FybmluZ3M+b24KKyAgICAgICAgIzx0b29sc2V0PmludGVsOjxjeHhmbGFncz4tc3RyaWN0LWFuc2kKKyAgICAgICAgPHRvb2xzZXQ+Z2NjOjxjeHhmbGFncz4iLXBlZGFudGljIC1Xc3RyaWN0LWFsaWFzaW5nIC1mc3RyaWN0LWFsaWFzaW5nIC1XZXh0cmEgLVdzaWduLXByb21vIC1XdW51c2VkLXBhcmFtZXRlciAtV2NvbnZlcnNpb24gLVdmbG9hdC1lcXVhbCAtV3NoYWRvdyIKKyAgICAgICAgPHRvb2xzZXQ+ZGFyd2luOjxjeHhmbGFncz4iLXBlZGFudGljIC1Xc3RyaWN0LWFsaWFzaW5nIC1mc3RyaWN0LWFsaWFzaW5nIC1XZXh0cmEgLVdzaWduLXByb21vIC1XdW51c2VkLXBhcmFtZXRlciAtV2NvbnZlcnNpb24gLVdmbG9hdC1lcXVhbCAtV3NoYWRvdyIKKyAgICAgICAgIzx0b29sc2V0Pm1zdmM6PHdhcm5pbmdzLWFzLWVycm9ycz5vbgorICAgICAgICAjPHRvb2xzZXQ+Z2NjOjx3YXJuaW5ncy1hcy1lcnJvcnM+b24KKyAgICAgICAgIzx0b29sc2V0PmRhcndpbjo8d2FybmluZ3MtYXMtZXJyb3JzPm9uCisgICAgOworCit0ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvaGFzaAorICAgIDoKKyAgICAgICAgWyBydW4gaGFzaF9md2RfdGVzdF8xLmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZndkX3Rlc3RfMi5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX251bWJlcl90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZW51bV90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfcG9pbnRlcl90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZnVuY3Rpb25fcG9pbnRlcl90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZmxvYXRfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX2xvbmdfZG91YmxlX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9zdHJpbmdfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3JhbmdlX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9jdXN0b21fdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX2dsb2JhbF9uYW1lc3BhY2VfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX2ZyaWVuZF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfYnVpbHRfaW5fYXJyYXlfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3ZhbHVlX2FycmF5X3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF92ZWN0b3JfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX2xpc3RfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX2RlcXVlX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9zZXRfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX21hcF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfY29tcGxleF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfdHlwZV9pbmRleF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfc3RkX2FycmF5X3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9zdGRfdHVwbGVfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3N0ZF9zbWFydF9wdHJfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBsaW5rX3Rlc3QuY3BwIGxpbmtfdGVzdF8yLmNwcCBdCisgICAgICAgIFsgcnVuIGxpbmtfZXh0X3Rlc3QuY3BwIGxpbmtfbm9fZXh0X3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gZXh0ZW5zaW9uc19ocHBfdGVzdC5jcHAgXQorICAgICAgICBbIGNvbXBpbGUtZmFpbCBoYXNoX25vX2V4dF9mYWlsX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBjb21waWxlLWZhaWwgbmFtZXNwYWNlX2ZhaWxfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBpbXBsaWNpdF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfbm9fZXh0X21hY3JvXzEuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9ub19leHRfbWFjcm9fMi5jcHAgXQorICAgIDsKKwordGVzdC1zdWl0ZSBmdW5jdGlvbmFsL2hhc2hfbm9fZXh0CisgICAgOgorICAgICAgICBbIHJ1biBoYXNoX251bWJlcl90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9udW1iZXJfdGVzdCBdCisgICAgICAgIFsgcnVuIGhhc2hfcG9pbnRlcl90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9wb2ludGVyX3Rlc3QgXQorICAgICAgICBbIHJ1biBoYXNoX2Z1bmN0aW9uX3BvaW50ZXJfdGVzdC5jcHAgOiA6IDogPGRlZmluZT5CT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgOiBub19leHRfZnVuY3Rpb25fcG9pbnRlcl90ZXN0IF0KKyAgICAgICAgWyBydW4gaGFzaF9mbG9hdF90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9mbG9hdF90ZXN0IF0KKyAgICAgICAgWyBydW4gaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9sb25nX2RvdWJsZV90ZXN0IF0KKyAgICAgICAgWyBydW4gaGFzaF9zdHJpbmdfdGVzdC5jcHAgOiA6IDogPGRlZmluZT5CT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgOiBub19leHRfc3RyaW5nX3Rlc3QgXQorICAgICAgICBbIHJ1biBsaW5rX3Rlc3QuY3BwIGxpbmtfdGVzdF8yLmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9saW5rX3Rlc3QgXQorICAgIDsKKworIyBUZXN0cyB0byBzZWUgaWYgdGhlIGZsb2F0aW5nIHBvaW50IGhhc2ggaXMgdXNpbmcgdGhlIGJpbmFyeSBoYXNoLgorIyBOb3QgcnVuIG5vcm1hbGx5IGJlY2F1c2Ugb24gc29tZSBwbGF0Zm9ybXMgdGhlc2Ugc2hvdWxkIGZhaWwuCit0ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvaGFzaF9ub19nZW5lcmljX2Zsb2F0CisgICAgOgorICAgICAgICBbIHJ1biBoYXNoX2Zsb2F0X3Rlc3QuY3BwCisgICAgICAgICAgICA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfREVUQUlMX1RFU1RfV0lUSE9VVF9HRU5FUklDCisgICAgICAgICAgICA6IGhhc2hfZmxvYXRfdGVzdF9ub19nZW5lcmljIF0KKyAgICAgICAgWyBydW4gaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcAorICAgICAgICAgICAgOiA6IDogPGRlZmluZT5CT09TVF9IQVNIX0RFVEFJTF9URVNUX1dJVEhPVVRfR0VORVJJQworICAgICAgICAgICAgOiBoYXNoX2xvbmdfZG91YmxlX3Rlc3Rfbm9fZ2VuZXJpYyBdCisgICAgOworZXhwbGljaXQgZnVuY3Rpb25hbC9oYXNoX25vX2dlbmVyaWNfZmxvYXQgOworCitidWlsZC1wcm9qZWN0IC4uL2V4YW1wbGVzIDsKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvY29tcGlsZV90aW1lLmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvY29tcGlsZV90aW1lLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQ0NWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb21waWxlX3RpbWUuaHBwCkBAIC0wLDAgKzEsMTYgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisjaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVyaXZlZC5ocHA+CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBjb21waWxlX3RpbWVfdGVzdHMoVCopCit7CisgICAgQk9PU1RfU1RBVElDX0FTU0VSVCgobmRuYm9vc3Q6OmlzX2Jhc2VfYW5kX2Rlcml2ZWQ8CisgICAgICAgIHN0ZDo6dW5hcnlfZnVuY3Rpb248VCwgc3RkOjpzaXplX3Q+LCBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+ID46OnZhbHVlKSk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvY29uZmlnLmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvY29uZmlnLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE0MjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb25maWcuaHBwCkBAIC0wLDAgKzEsMjEgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX1NURCkKKyMgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICBkZWZpbmUgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRSBzdGQKKyNlbHNlCisjICBkZWZpbmUgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRSBuZG5ib29zdAorIyAgaWYgIWRlZmluZWQoQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TKQorIyAgICBkZWZpbmUgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKKy8vIFRoZSBzdGFuZGFyZCB3aW5kb3dzIG1vYmlsZSBoZWFkZXJzIHRyaWdnZXIgdGhpcyB3YXJuaW5nIHNvIEkgZGlzYWJsZSBpdAorLy8gYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjAxKSAgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZWxlc3Mgc3RydWN0L3VuaW9uCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0ZW5zaW9uc19ocHBfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2V4dGVuc2lvbnNfaHBwX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjZmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2V4dGVuc2lvbnNfaHBwX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTkgQEAKKworLy8gQ29weXJpZ2h0IDIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIENoZWNrIHRoYXQgYm9vc3QvZnVuY3Rpb25hbC9oYXNoL2V4dGVuc2lvbnMuaHBwIHdvcmtzIG9rYXkuCisvLworLy8gSXQgcHJvYmFibHkgc2hvdWxkIGJlIGluIGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWwsIGJ1dCBzaW5jZSBpdCBpc24ndCBpdAorLy8gc2hvdWxkIHdvcmsuCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2gvZXh0ZW5zaW9ucy5ocHA+CisKK2ludCBtYWluKCkgeworICAgIGludCB4WzJdID0geyAyLCAzIH07CisgICAgbmRuYm9vc3Q6Omhhc2g8aW50WzJdPiBoZjsKKyAgICBoZih4KTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvSmFtZmlsZS52MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDNjMWIxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRyYS9KYW1maWxlLnYyCkBAIC0wLDAgKzEsMTMgQEAKKworIyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKK2ltcG9ydCB0ZXN0aW5nIDsKKworYnVpbGQtcHJvamVjdCAuLiA7CisKK3Rlc3Qtc3VpdGUgZnVuY3Rpb25hbC9oYXNoL2NvbmZpZworICAgIDoKKyAgICAgICAgWyBjb21waWxlIGNoZWNrX2Zsb2F0X2Z1bmNzLmNwcCBdCisgICAgOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvY2hlY2tfZmxvYXRfZnVuY3MuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRyYS9jaGVja19mbG9hdF9mdW5jcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4MTdiYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0cmEvY2hlY2tfZmxvYXRfZnVuY3MuY3BwCkBAIC0wLDAgKzEsNTggQEAKKworLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4KKyNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KKyNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHA+CisjaW5jbHVkZSA8Y21hdGg+CisKK25hbWVzcGFjZSB0ZXN0Cit7CisgICAgdGVtcGxhdGUgPGNsYXNzIFQxPgorICAgIHN0cnVjdCBjaGVja19yZXR1cm5fdHlwZQorICAgIHsKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQyPgorICAgICAgICBzdGF0aWMgdm9pZCBlcXVhbHMoVDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKG5kbmJvb3N0Ojppc19zYW1lPFQxLCBUMj46OnZhbHVlKSk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDI+CisgICAgICAgIHN0YXRpYyB2b2lkIGVxdWFsc19yZWYoVDImKQorICAgICAgICB7CisgICAgICAgICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKChuZG5ib29zdDo6aXNfc2FtZTxUMSwgVDI+Ojp2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQyPgorICAgICAgICBzdGF0aWMgdm9pZCBjb252ZXJ0aWJsZShUMikKKyAgICAgICAgeworICAgICAgICAgICAgQk9PU1RfU1RBVElDX0FTU0VSVCgobmRuYm9vc3Q6OmlzX2NvbnZlcnRpYmxlPFQyLCBUMT46OnZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9OworfQorCitpbnQgbWFpbigpIHsKKyAgICBmbG9hdCBmID0gMDsKKyAgICBkb3VibGUgZCA9IDA7CisgICAgbG9uZyBkb3VibGUgbCA9IDA7CisKKyAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxmbG9hdD46OmVxdWFscyhzdGQ6OmxkZXhwKGYsIDApKTsKKyAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxkb3VibGU+OjplcXVhbHMoc3RkOjpsZGV4cChkLCAwKSk7CisgICAgdGVzdDo6Y2hlY2tfcmV0dXJuX3R5cGU8bG9uZyBkb3VibGU+OjplcXVhbHMoc3RkOjpsZGV4cChsLCAwKSk7CisKKyAgICBpbnQgZHVtbXkgPSAwOworCisgICAgdGVzdDo6Y2hlY2tfcmV0dXJuX3R5cGU8ZmxvYXQ+OjplcXVhbHMoc3RkOjpmcmV4cChmLCAmZHVtbXkpKTsKKyAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxkb3VibGU+OjplcXVhbHMoc3RkOjpmcmV4cChkLCAmZHVtbXkpKTsKKyAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxsb25nIGRvdWJsZT46OmVxdWFscyhzdGQ6OmZyZXhwKGwsICZkdW1teSkpOworCisjaWYgQk9PU1RfSEFTSF9VU0VfRlBDTEFTU0lGWQorCisgICAgaW50ICgqZnBjMSkoZmxvYXQpID0gc3RkOjpmcGNsYXNzaWZ5OworICAgIGludCAoKmZwYzIpKGRvdWJsZSkgPSBzdGQ6OmZwY2xhc3NpZnk7CisgICAgaW50ICgqZnBjMykobG9uZyBkb3VibGUpID0gc3RkOjpmcGNsYXNzaWZ5OworCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9idWlsdF9pbl9hcnJheV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9idWlsdF9pbl9hcnJheV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjZmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2J1aWx0X2luX2FycmF5X3Rlc3QuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisjICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjICBlbHNlCisjICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCit2b2lkIGFycmF5X2ludF90ZXN0KCkKK3sKKyAgICBjb25zdCBpbnQgbGVuZ3RoMSA9IDI1OworICAgIGludCBhcnJheTFbMjVdID0geworICAgICAgICAyNiwgLTQzLCAzMiwgNjUsIDQ1LAorICAgICAgICAxMiwgNjcsIDMyLCAxMiwgMjMsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDgsIC0xMiwgMjMsIDY1LCA0NSwKKyAgICAgICAgLTEsIDkzLCAtNTQsIDk4NywgMworICAgIH07CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMjVdPiBoYXNoZXIxOworCisgICAgY29uc3QgaW50IGxlbmd0aDIgPSAxOworICAgIGludCBhcnJheTJbMV0gPSB7M307CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMV0+IGhhc2hlcjI7CisKKyAgICBjb25zdCBpbnQgbGVuZ3RoMyA9IDI7CisgICAgaW50IGFycmF5M1syXSA9IHsyLCAzfTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsyXT4gaGFzaGVyMzsKKworICAgIEJPT1NUX1RFU1QoaGFzaGVyMShhcnJheTEpCisgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGFycmF5MSwgYXJyYXkxICsgbGVuZ3RoMSkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyMihhcnJheTIpCisgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGFycmF5MiwgYXJyYXkyICsgbGVuZ3RoMikpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyMyhhcnJheTMpCisgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGFycmF5MywgYXJyYXkzICsgbGVuZ3RoMykpOworfQorCit2b2lkIHR3b19kaW1lbnNpb25hbF9hcnJheV90ZXN0KCkKK3sKKyAgICBpbnQgYXJyYXlbM11bMl0gPSB7ey01LCA2fSwgezcsIC0zfSwgezI2LCAxfX07CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbM11bMl0+IGhhc2hlcjsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQxID0gMDsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgMzsgKytpKQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3Qgc2VlZDIgPSAwOworICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgMjsgKytqKQorICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCBhcnJheVtpXVtqXSk7CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMSwgc2VlZDIpOworICAgIH0KKworICAgIEJPT1NUX1RFU1QoaGFzaGVyKGFycmF5KSA9PSBzZWVkMSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIoYXJyYXkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoYXJyYXksIGFycmF5ICsgMykpOworfQorCisjZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworaW50IG1haW4oKQoreworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisgICAgYXJyYXlfaW50X3Rlc3QoKTsKKyAgICB0d29fZGltZW5zaW9uYWxfYXJyYXlfdGVzdCgpOworI2VuZGlmCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY29tcGxleF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jb21wbGV4X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjQxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY29tcGxleF90ZXN0LmNwcApAQCAtMCwwICsxLDExMCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisKK2ludCBtYWluKCkge30KKworI2Vsc2UKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NCkgICAvLyBjb252ZXJzaW9uIGZyb20gJ3Vuc2lnbmVkIGxvbmcnIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICd1bnNpZ25lZCBzaG9ydCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkgICAvLyBjb252ZXJzaW9uIGZyb20gJ2ludCcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0IHVuc2lnbmVkIHNob3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MzA1KSAgIC8vIHRydW5jYXRpb24gZnJvbSAnZG91YmxlJyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3Qgc3RkOjpjb21wbGV4PGZsb2F0Pjo6X1R5JworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDMwOSkgICAvLyB0cnVuY2F0aW9uIG9mIGNvbnN0YW50IHZhbHVlCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTEyKSAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3IgY291bGQgbm90IGJlIGdlbmVyYXRlZAorI2lmIEJPT1NUX01TVkMgPCAxNDAwCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjY3KSAgIC8vIGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAndW5zaWduZWQgaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUgbG9zcyBvZiBkYXRhCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoQk9PU1RfSU5URUxfQ1hYX1ZFUlNJT04pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZmxvYXQtZXF1YWwiCisjZW5kaWYKKworI2luY2x1ZGUgPGNvbXBsZXg+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKHN0ZDo6Y29tcGxleDxUPiB2KQoreworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpjb21wbGV4PFQ+ID4gY29tcGxleF9oYXNoZXI7CisKKyAgICBCT09TVF9URVNUKGNvbXBsZXhfaGFzaGVyKHYpID09IGNvbXBsZXhfaGFzaGVyKHYpKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gcmVhbF9oYXNoZXI7CisgICAgVCByZWFsID0gdi5yZWFsKCk7CisgICAgVCBpbWFnID0gdi5pbWFnKCk7CisKKyAgICBCT09TVF9URVNUKHJlYWxfaGFzaGVyKHJlYWwpID09IGNvbXBsZXhfaGFzaGVyKHN0ZDo6Y29tcGxleDxUPihyZWFsKSkpOworCisgICAgaWYoaW1hZyAhPSAwICYmIHJlYWxfaGFzaGVyKHJlYWwpID09IGNvbXBsZXhfaGFzaGVyKHYpKSB7CisgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvczsKKyAgICAgICAgb3M8PCJyZWFsX2hhc2hlcigiPDxyZWFsPDwiKSA9PSBjb21wbGV4X2hhc2hlcigiCisgICAgICAgICAgICA8PHYucmVhbCgpPDwiICsgIjw8di5pbWFnKCk8PCJpKSA9PSAiCisgICAgICAgICAgICA8PHJlYWxfaGFzaGVyKHJlYWwpPDwiIChUaGlzIG1pZ2h0IG5vdCBiZSBhIGJ1ZykuIjsKKyAgICAgICAgQk9PU1RfRVJST1Iob3Muc3RyKCkuY19zdHIoKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRmxvYXQ+Cit2b2lkIGNvbXBsZXhfZmxvYXRfdGVzdHMoRmxvYXQqKQoreworICAgIHR5cGVkZWYgc3RkOjpjb21wbGV4PEZsb2F0PiBjb21wbGV4OworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDAsMCkpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDAuNSwwKSk7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMjUsMCkpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDI1LDApKTsKKyAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleChzdGF0aWNfY2FzdDxGbG9hdD4oLTY3LjUzMjQ1MzUpLHN0YXRpY19jYXN0PEZsb2F0Pig1Ni4yMzU3ODY3OCkpKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEludGVnZXI+Cit2b2lkIGNvbXBsZXhfaW50ZWdyYWxfdGVzdHMoSW50ZWdlciopCit7CisgICAgdHlwZWRlZiBzdGQ6OmNvbXBsZXg8SW50ZWdlcj4gY29tcGxleDsKKyAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgwLDApKTsKKyAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgxNTM0MiwxMjQpKTsKKyAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgyNSw1NDM1NikpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDUzMjUsMjM0NikpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KC0yNDM4OTcsLTQ5OTIzODc0KSk7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoLTU0Myw3NjMpKTsKK30KKworaW50IG1haW4oKQoreworICAgIC8vIEkndmUgY29tbWVudHMgb3V0IHRoZSBzaG9ydCBhbmQgdW5zaWduZWQgc2hvcnQgdGVzdHMKKyAgICAvLyBhcyB0aGV5IGNhdXNlIHdhcm5pbmdzIGFuZCBkb24ndCByZWFsbHkgdGVzdAorICAgIC8vIGFueXRoaW5nIHRoYXQgdGhlIG90aGVyIHRlc3RzIGFscmVhZHkgZGVhbCB3aXRoLgorCisgICAgY29tcGxleF9mbG9hdF90ZXN0cygoZmxvYXQqKSAwKTsKKyAgICBjb21wbGV4X2Zsb2F0X3Rlc3RzKChkb3VibGUqKSAwKTsKKyAgICBjb21wbGV4X2Zsb2F0X3Rlc3RzKChsb25nIGRvdWJsZSopIDApOworICAgIC8vY29tcGxleF9pbnRlZ3JhbF90ZXN0cygoc2hvcnQqKSAwKTsKKyAgICBjb21wbGV4X2ludGVncmFsX3Rlc3RzKChpbnQqKSAwKTsKKyAgICBjb21wbGV4X2ludGVncmFsX3Rlc3RzKChsb25nKikgMCk7CisgICAgLy9jb21wbGV4X2ludGVncmFsX3Rlc3RzKCh1bnNpZ25lZCBzaG9ydCopIDApOworICAgIGNvbXBsZXhfaW50ZWdyYWxfdGVzdHMoKHVuc2lnbmVkIGludCopIDApOworICAgIGNvbXBsZXhfaW50ZWdyYWxfdGVzdHMoKHVuc2lnbmVkIGxvbmcqKSAwKTsKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQorCisjZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jdXN0b21fdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY3VzdG9tX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmEzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfY3VzdG9tX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorCituYW1lc3BhY2UgdGVzdAoreworICAgIHN0cnVjdCBjdXN0b20KKyAgICB7CisgICAgICAgIGludCB2YWx1ZV87CisKKyAgICAgICAgc3RkOjpzaXplX3QgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZV8gKiAxMDsKKyAgICAgICAgfQorCisjaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKKyAgICAgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tIGNvbnN0JiB4ICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjdXN0b20oaW50IHgpIDogdmFsdWVfKHgpIHt9CisgICAgfTsKK30KKworI2lmIGRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKK25hbWVzcGFjZSBuZG5ib29zdAoreworICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdDo6Y3VzdG9tIHgpCisgICAgeworICAgICAgICByZXR1cm4geC5oYXNoKCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8Y2N0eXBlPgorCit2b2lkIGN1c3RvbV90ZXN0cygpCit7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjpjdXN0b20+IGN1c3RvbV9oYXNoZXI7CisgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKDEwKSA9PSAxMDB1KTsKKyAgICB0ZXN0OjpjdXN0b20geCg1NSk7CisgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKHgpID09IDU1MHUpOworCisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTsKKyAgICAgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKHgpID09IGhhc2hfdmFsdWUoeCkpOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPHRlc3Q6OmN1c3RvbT4gY3VzdG9tX3ZlY3RvcjsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjayg1KTsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjaygyNSk7CisgICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soMzUpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZCA9IDA7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbSg1KSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbSgyNSkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCB0ZXN0OjpjdXN0b20oMzUpKTsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQyID0gMDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDUwdSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCAyNTB1KTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDM1MHUpOworCisgICAgQk9PU1RfVEVTVChzZWVkID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCisgICAgICAgIGN1c3RvbV92ZWN0b3IuYmVnaW4oKSwgY3VzdG9tX3ZlY3Rvci5lbmQoKSkpOworICAgIEJPT1NUX1RFU1Qoc2VlZCA9PSBzZWVkMik7Cit9CisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBjdXN0b21fdGVzdHMoKTsKKyNlbmRpZgorICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2RlcXVlX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2RlcXVlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTlkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZGVxdWVfdGVzdC5jcHAKQEAgLTAsMCArMSwzNSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKKyNpbmNsdWRlIDxkZXF1ZT4KKwordXNpbmcgc3RkOjpkZXF1ZTsKKyNkZWZpbmUgQ09OVEFJTkVSX1RZUEUgZGVxdWUKKyNpbmNsdWRlICIuL2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAiCisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBkZXF1ZV90ZXN0czo6ZGVxdWVfaGFzaF9pbnRlZ2VyX3Rlc3RzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2VudW1fdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZW51bV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODEzODdhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2VudW1fdGVzdC5jcHAKQEAgLTAsMCArMSw2MyBAQAorCisvLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKKworbmFtZXNwYWNlIHRlc3QgeworICAgIGVudW0gZW51bV9vdmVycmlkZSB7IGVudW1fb3ZlcnJpZGUxLCBlbnVtX292ZXJyaWRlMiB9OworICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoZW51bV9vdmVycmlkZSkgeyByZXR1cm4gODk2NTMyOyB9CisKKyAgICBlbnVtIGVudW0xIHsgZW51bTFhIH07CisgICAgZW51bSBlbnVtMiB7IGVudW0yYSwgZW51bTJiIH07CisgICAgZW51bSBlbnVtMyB7IGVudW0zYSA9IDU3NCwgZW51bTNiIH07CisgICAgZW51bSBlbnVtNCB7IGVudW00YSA9IC0xMjU3NCwgZW51bTRiIH07Cit9CisKK2ludCBtYWluKCkgeworICAgIGNvbXBpbGVfdGltZV90ZXN0cygodGVzdDo6ZW51bTEqKSAwKTsKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKHRlc3Q6OmVudW0yKikgMCk7CisgICAgY29tcGlsZV90aW1lX3Rlc3RzKCh0ZXN0OjplbnVtMyopIDApOworICAgIGNvbXBpbGVfdGltZV90ZXN0cygodGVzdDo6ZW51bTQqKSAwKTsKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKHRlc3Q6OmVudW1fb3ZlcnJpZGUqKSAwKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6ZW51bTE+IGhhc2gxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6ZW51bTI+IGhhc2gyOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6ZW51bTM+IGhhc2gzOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6ZW51bTQ+IGhhc2g0OworCisgICAgQk9PU1RfVEVTVChoYXNoMSh0ZXN0OjplbnVtMWEpID09IGhhc2gxKHRlc3Q6OmVudW0xYSkpOworCisgICAgQk9PU1RfVEVTVChoYXNoMih0ZXN0OjplbnVtMmEpID09IGhhc2gyKHRlc3Q6OmVudW0yYSkpOworICAgIEJPT1NUX1RFU1QoaGFzaDIodGVzdDo6ZW51bTJhKSAhPSBoYXNoMih0ZXN0OjplbnVtMmIpKTsKKyAgICBCT09TVF9URVNUKGhhc2gyKHRlc3Q6OmVudW0yYikgPT0gaGFzaDIodGVzdDo6ZW51bTJiKSk7CisKKyAgICBCT09TVF9URVNUKGhhc2gzKHRlc3Q6OmVudW0zYSkgPT0gaGFzaDModGVzdDo6ZW51bTNhKSk7CisgICAgQk9PU1RfVEVTVChoYXNoMyh0ZXN0OjplbnVtM2EpICE9IGhhc2gzKHRlc3Q6OmVudW0zYikpOworICAgIEJPT1NUX1RFU1QoaGFzaDModGVzdDo6ZW51bTNiKSA9PSBoYXNoMyh0ZXN0OjplbnVtM2IpKTsKKworICAgIEJPT1NUX1RFU1QoaGFzaDQodGVzdDo6ZW51bTRhKSA9PSBoYXNoNCh0ZXN0OjplbnVtNGEpKTsKKyAgICBCT09TVF9URVNUKGhhc2g0KHRlc3Q6OmVudW00YSkgIT0gaGFzaDQodGVzdDo6ZW51bTRiKSk7CisgICAgQk9PU1RfVEVTVChoYXNoNCh0ZXN0OjplbnVtNGIpID09IGhhc2g0KHRlc3Q6OmVudW00YikpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjplbnVtX292ZXJyaWRlPiBoYXNoX292ZXJyaWRlOworCisgICAgQk9PU1RfVEVTVChoYXNoX292ZXJyaWRlKHRlc3Q6OmVudW1fb3ZlcnJpZGUxKSA9PQorICAgICAgICBoYXNoX292ZXJyaWRlKHRlc3Q6OmVudW1fb3ZlcnJpZGUxKSk7CisgICAgQk9PU1RfVEVTVChoYXNoX292ZXJyaWRlKHRlc3Q6OmVudW1fb3ZlcnJpZGUxKSA9PQorICAgICAgICBoYXNoX292ZXJyaWRlKHRlc3Q6OmVudW1fb3ZlcnJpZGUyKSk7CisgICAgQk9PU1RfVEVTVChoYXNoX292ZXJyaWRlKHRlc3Q6OmVudW1fb3ZlcnJpZGUxKSA9PQorICAgICAgICBoYXNoX292ZXJyaWRlKHRlc3Q6OmVudW1fb3ZlcnJpZGUxKSk7CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mbG9hdF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mbG9hdF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWNkNTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTggQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgImhhc2hfZmxvYXRfdGVzdC5ocHAiCisKK2ludCBtYWluKCkKK3sKKyAgICBzdGQ6OmNlcnI8PCJDb21waWxlcjogIjw8Qk9PU1RfQ09NUElMRVI8PCJcbiI7CisgICAgc3RkOjpjZXJyPDwiUGxhdGZvcm06ICI8PEJPT1NUX1BMQVRGT1JNPDwiXG4iOworICAgIHN0ZDo6Y2Vycjw8IkxpYnJhcnk6ICI8PEJPT1NUX1NURExJQjw8IlxuXG4iOworCisgICAgZmxvYXRfdGVzdHMoImZsb2F0IiwgKGZsb2F0KikgMCk7CisgICAgZmxvYXRfdGVzdHMoImRvdWJsZSIsIChkb3VibGUqKSAwKTsKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjkzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5ocHAKQEAgLTAsMCArMSwzMDkgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoL2RldGFpbC9saW1pdHMuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWwvZmxvYXRfZnVuY3Rpb25zLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+CisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykgICAvLyBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NzIzKSAgIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKKyNpZiBCT09TVF9NU1ZDIDwgMTQwMAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI2NykgICAvLyBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ3Vuc2lnbmVkIGludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVxdWFsIgorI2VuZGlmCisKK2NoYXIgY29uc3QqIGZsb2F0X3R5cGUoZmxvYXQqKSB7IHJldHVybiAiZmxvYXQiOyB9CitjaGFyIGNvbnN0KiBmbG9hdF90eXBlKGRvdWJsZSopIHsgcmV0dXJuICJkb3VibGUiOyB9CitjaGFyIGNvbnN0KiBmbG9hdF90eXBlKGxvbmcgZG91YmxlKikgeyByZXR1cm4gImxvbmcgZG91YmxlIjsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgZmxvYXRfdGVzdHMoY2hhciBjb25zdCogbmFtZSwgVCogPSAwKQoreworICAgIHN0ZDo6Y2VycgorICAgICAgICA8PCAgIlxuIgorICAgICAgICA8PCAgIlRlc3RpbmcgIiBCT09TVF9TVFJJTkdJWkUoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRSkgIjo6aGFzaDwiCisgICAgICAgIDw8ICBuYW1lCisgICAgICAgIDw8ICAiPlxuIgorICAgICAgICA8PCAgIlxuIgorICAgICAgICA8PCAgIm5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkaWdpdHMgPSAiCisgICAgICAgIDw8ICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGlnaXRzPDwgIlxuIgorICAgICAgICA8PCAgIm5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPGludD46OmRpZ2l0cyA9ICIKKyAgICAgICAgPDwgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPGludD46OmRpZ2l0czw8ICJcbiIKKyAgICAgICAgPDwgICJuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxzdGQ6OnNpemVfdD46OmRpZ2l0cyA9ICIKKyAgICAgICAgPDwgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPHN0ZDo6c2l6ZV90Pjo6ZGlnaXRzCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2xkZXhwPFQ+OjpmbG9hdF90eXBlID0gIgorICAgICAgICA8PCAgZmxvYXRfdHlwZShzdGF0aWNfY2FzdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FCisgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2xkZXhwPFQ+OjpmbG9hdF90eXBlKj4oMCkpCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2ZyZXhwPFQ+OjpmbG9hdF90eXBlID0gIgorICAgICAgICA8PCAgZmxvYXRfdHlwZShzdGF0aWNfY2FzdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FCisgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpjYWxsX2ZyZXhwPFQ+OjpmbG9hdF90eXBlKj4oMCkpCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpzZWxlY3RfaGFzaF90eXBlPFQ+Ojp0eXBlID0gIgorICAgICAgICA8PCAgZmxvYXRfdHlwZShzdGF0aWNfY2FzdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FCisgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpzZWxlY3RfaGFzaF90eXBlPFQ+Ojp0eXBlKj4oMCkpCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDE7CisKKyAgICBUIHplcm8gPSAwOworICAgIFQgbWludXNfemVybyA9IChUKSAtMSAqIHplcm87CisKKyAgICBCT09TVF9URVNUKHplcm8gPT0gbWludXNfemVybyk7CisgICAgQk9PU1RfVEVTVCh4MSh6ZXJvKSA9PSB4MShtaW51c196ZXJvKSk7CisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIEJPT1NUX1RFU1QoeDEoemVybykgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh6ZXJvKSk7CisgICAgQk9PU1RfVEVTVCh4MShtaW51c196ZXJvKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1pbnVzX3plcm8pKTsKKyNlbmRpZgorCisgICAgQk9PU1RfVEVTVCh4MSh6ZXJvKSAhPSB4MSgwLjUpKTsKKyAgICBCT09TVF9URVNUKHgxKG1pbnVzX3plcm8pICE9IHgxKDAuNSkpOworICAgIEJPT1NUX1RFU1QoeDEoMC41KSAhPSB4MSgtMC41KSk7CisgICAgQk9PU1RfVEVTVCh4MSgxKSAhPSB4MSgtMSkpOworCisgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworLy8gRG9pbmcgYW55dGhpbmcgd2l0aCBpbmZpbml0eSBjYXVzZXMgYm9ybGFuZCB0byBjcmFzaC4KKyNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKKyAgICBzdGQ6OmNlcnIKKyAgICAgICAgPDwgICJOb3QgcnVubmluZyBpbmZpbml0eSBjaGVja3Mgb24gQm9ybGFuZCwgYXMgaXQgY2F1c2VzIGl0IHRvIGNyYXNoLiIKKyAgICAgICAgICAgICJcbiI7CisjZWxzZQorICAgIGlmKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpoYXNfaW5maW5pdHkpIHsKKyAgICAgICAgVCBpbmZpbml0eSA9IC1sb2coemVybyk7CisgICAgICAgIFQgaW5maW5pdHkyID0gKFQpIDEuIC8gemVybzsKKyAgICAgICAgVCBpbmZpbml0eTMgPSAoVCkgLTEuIC8gbWludXNfemVybzsKKyAgICAgICAgVCBpbmZpbml0eTQgPSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aW5maW5pdHkoKTsKKworICAgICAgICBUIG1pbnVzX2luZmluaXR5ID0gbG9nKHplcm8pOworICAgICAgICBUIG1pbnVzX2luZmluaXR5MiA9IChUKSAtMS4gLyB6ZXJvOworICAgICAgICBUIG1pbnVzX2luZmluaXR5MyA9IChUKSAxLiAvIG1pbnVzX3plcm87CisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgICAgICBCT09TVF9URVNUKHgxKGluZmluaXR5KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGluZmluaXR5KSk7CisgICAgICAgIEJPT1NUX1RFU1QoeDEobWludXNfaW5maW5pdHkpCisgICAgICAgICAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtaW51c19pbmZpbml0eSkpOworI2VuZGlmCisKKyAgICAgICAgaWYoaW5maW5pdHkgPT0gaW5maW5pdHkyKQorICAgICAgICAgICAgQk9PU1RfVEVTVCh4MShpbmZpbml0eSkgPT0geDEoaW5maW5pdHkyKSk7CisgICAgICAgIGlmKGluZmluaXR5ID09IGluZmluaXR5MykKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoeDEoaW5maW5pdHkpID09IHgxKGluZmluaXR5MykpOworICAgICAgICBpZihpbmZpbml0eSA9PSBpbmZpbml0eTQpCisgICAgICAgICAgICBCT09TVF9URVNUKHgxKGluZmluaXR5KSA9PSB4MShpbmZpbml0eTQpKTsKKworICAgICAgICBpZihtaW51c19pbmZpbml0eSA9PSBtaW51c19pbmZpbml0eTIpCisgICAgICAgICAgICBCT09TVF9URVNUKHgxKG1pbnVzX2luZmluaXR5KSA9PSB4MShtaW51c19pbmZpbml0eTIpKTsKKyAgICAgICAgaWYobWludXNfaW5maW5pdHkgPT0gbWludXNfaW5maW5pdHkzKQorICAgICAgICAgICAgQk9PU1RfVEVTVCh4MShtaW51c19pbmZpbml0eSkgPT0geDEobWludXNfaW5maW5pdHkzKSk7CisKKyAgICAgICAgQk9PU1RfVEVTVChpbmZpbml0eSAhPSBtaW51c19pbmZpbml0eSk7CisKKyAgICAgICAgaWYoeDEoaW5maW5pdHkpID09IHgxKG1pbnVzX2luZmluaXR5KSkgeworICAgICAgICAgICAgc3RkOjpjZXJyPDwieDEoaW5maW5pdHkpID09IHgxKC1pbmZpbml0eSkgPT0gIjw8eDEoaW5maW5pdHkpPDwiXG4iOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgcmVhbGx5IGJlICdoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50JyBidXQgc29tZQorICAgICAgICAvLyBjb21waWxlcnMgZG9uJ3QgaGF2ZSAnZGVub3JtX3ByZXNlbnQnLiBTZWUgYWxzbyBhIGxhdGVyIHVzZS4KKyAgICAgICAgaWYobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46Omhhc19kZW5vcm0pIHsKKyAgICAgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpID09IHgxKGluZmluaXR5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKKyAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShkZW5vcm1fbWluKSA9PSB4MShpbmZpbml0eSkgPT0gIgorICAgICAgICAgICAgICAgICAgICA8PCAgeDEoaW5maW5pdHkpCisgICAgICAgICAgICAgICAgICAgIDw8ICAiXG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSA9PQorICAgICAgICAgICAgICAgIHgxKG1pbnVzX2luZmluaXR5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKKyAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShkZW5vcm1fbWluKSA9PSB4MSgtaW5maW5pdHkpID09ICIKKyAgICAgICAgICAgICAgICAgICAgPDwgIHgxKG1pbnVzX2luZmluaXR5KQorICAgICAgICAgICAgICAgICAgICA8PCAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpoYXNfcXVpZXRfTmFOKSB7CisgICAgICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpID09IHgxKGluZmluaXR5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKKyAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShxdWlldF9OYU4pID09IHgxKGluZmluaXR5KSA9PSAiCisgICAgICAgICAgICAgICAgICAgIDw8ICB4MShpbmZpbml0eSkKKyAgICAgICAgICAgICAgICAgICAgPDwgICJcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpxdWlldF9OYU4oKSkgPT0KKyAgICAgICAgICAgICAgICB4MShtaW51c19pbmZpbml0eSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpjZXJyCisgICAgICAgICAgICAgICAgICAgIDw8ICAieDEocXVpZXRfTmFOKSA9PSB4MSgtaW5maW5pdHkpID09ICIKKyAgICAgICAgICAgICAgICAgICAgPDwgIHgxKG1pbnVzX2luZmluaXR5KQorICAgICAgICAgICAgICAgICAgICA8PCAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgVCBtYXggPSAobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46Om1heCkoKTsKKyAgICBUIGhhbGZfbWF4ID0gbWF4IC8gMjsKKyAgICBUIHF1YXJ0ZXJfbWF4ID0gbWF4IC8gNDsKKyAgICBUIHRocmVlX3F1YXJ0ZXJfbWF4ID0gbWF4IC0gcXVhcnRlcl9tYXg7CisgICAgCisgICAgLy8gQ2hlY2sgdGhlIGxpbWl0czo6bWF4IGlzIGluIHJhbmdlLgorICAgIEJPT1NUX1RFU1QobWF4ICE9IGhhbGZfbWF4KTsKKyAgICBCT09TVF9URVNUKG1heCAhPSBxdWFydGVyX21heCk7CisgICAgQk9PU1RfVEVTVChtYXggIT0gdGhyZWVfcXVhcnRlcl9tYXgpOworICAgIEJPT1NUX1RFU1QoaGFsZl9tYXggIT0gcXVhcnRlcl9tYXgpOworICAgIEJPT1NUX1RFU1QoaGFsZl9tYXggIT0gdGhyZWVfcXVhcnRlcl9tYXgpOworICAgIEJPT1NUX1RFU1QocXVhcnRlcl9tYXggIT0gdGhyZWVfcXVhcnRlcl9tYXgpOworCisgICAgQk9PU1RfVEVTVChtYXggIT0gLW1heCk7CisgICAgQk9PU1RfVEVTVChoYWxmX21heCAhPSAtaGFsZl9tYXgpOworICAgIEJPT1NUX1RFU1QocXVhcnRlcl9tYXggIT0gLXF1YXJ0ZXJfbWF4KTsKKyAgICBCT09TVF9URVNUKHRocmVlX3F1YXJ0ZXJfbWF4ICE9IC10aHJlZV9xdWFydGVyX21heCk7CisKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVCh4MShtYXgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUobWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShoYWxmX21heCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShoYWxmX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEocXVhcnRlcl9tYXgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUocXVhcnRlcl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKHRocmVlX3F1YXJ0ZXJfbWF4KSA9PQorICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHRocmVlX3F1YXJ0ZXJfbWF4KSk7CisjZW5kaWYKKworICAgIC8vIFRoZSAnIT0nIHRlc3RzIGNvdWxkIGxlZ2l0aW1hdGVseSBmYWlsLCBidXQgd2l0aCBteSBoYXNoIGl0IGluZGljYXRlcyBhCisgICAgLy8gYnVnLgorICAgIEJPT1NUX1RFU1QoeDEobWF4KSA9PSB4MShtYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKG1heCkgIT0geDEocXVhcnRlcl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKG1heCkgIT0geDEoaGFsZl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKG1heCkgIT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKHF1YXJ0ZXJfbWF4KSA9PSB4MShxdWFydGVyX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEocXVhcnRlcl9tYXgpICE9IHgxKGhhbGZfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShxdWFydGVyX21heCkgIT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKGhhbGZfbWF4KSA9PSB4MShoYWxmX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEoaGFsZl9tYXgpICE9IHgxKHRocmVlX3F1YXJ0ZXJfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MSh0aHJlZV9xdWFydGVyX21heCkgPT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKKworICAgIEJPT1NUX1RFU1QoeDEobWF4KSAhPSB4MSgtbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShoYWxmX21heCkgIT0geDEoLWhhbGZfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShxdWFydGVyX21heCkgIT0geDEoLXF1YXJ0ZXJfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MSh0aHJlZV9xdWFydGVyX21heCkgIT0geDEoLXRocmVlX3F1YXJ0ZXJfbWF4KSk7CisKKworLy8gSW50ZWwgd2l0aCBnY2Mgc3RkbGliIHNvbWV0aW1lcyBzZWdmYXVsdHMgb24gY2FsbHMgdG8gYXNpbiBhbmQgYWNvcy4KKyNpZiAhKChkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19JQ0wpIHx8IFwKKyAgICAgICAgZGVmaW5lZChfX0lDQykgfHwgZGVmaW5lZChfX0VDQykpICYmIFwKKyAgICAoZGVmaW5lZChfX0dMSUJDUFBfXykgfHwgZGVmaW5lZChfX0dMSUJDWFhfXykpKQorICAgIFQgdjEgPSBhc2luKChUKSAxKTsKKyAgICBUIHYyID0gYWNvcygoVCkgMCk7CisgICAgaWYodjEgPT0gdjIpCisgICAgICAgIEJPT1NUX1RFU1QoeDEodjEpID09IHgxKHYyKSk7CisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIEJPT1NUX1RFU1QoeDEodjEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodjEpKTsKKyAgICBCT09TVF9URVNUKHgxKHYyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHYyKSk7CisjZW5kaWYKKyAgICAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBCT09TVF9URVNUKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKAorICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpKTsKKyNlbmRpZgorCisgICAgQk9PU1RfVEVTVChuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpICE9IChUKSAwKTsKKyAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMCkpCisgICAgICAgIHN0ZDo6Y2Vycjw8IngxKGVwc2lsb24pID09IHgxKDApID09ICI8PHgxKChUKSAwKTw8IlxuIjsKKworICAgIEJPT1NUX1RFU1QoLW5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkgIT0gKFQpIDApOworICAgIGlmKHgxKC1uZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMCkpCisgICAgICAgIHN0ZDo6Y2Vycjw8IngxKC1lcHNpbG9uKSA9PSB4MSgwKSA9PSAiPDx4MSgoVCkgMCk8PCJcbiI7CisKKyAgICBCT09TVF9URVNUKChUKSAxICsgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSAhPSAoVCkgMSk7CisgICAgaWYoeDEoKFQpIDEgKyBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMSkpCisgICAgICAgIHN0ZDo6Y2Vycjw8IngxKDEgKyBlcHNpbG9uKSA9PSB4MSgxKSA9PSAiPDx4MSgoVCkgMSk8PCJcbiI7CisKKyAgICBCT09TVF9URVNUKChUKSAxIC0gbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSAhPSAoVCkgMSk7CisgICAgaWYoeDEoKFQpIDEgLSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgMSkpCisgICAgICAgIHN0ZDo6Y2Vycjw8IngxKDEgLSBlcHNpbG9uKSA9PSB4MSgxKSA9PSAiPDx4MSgoVCkgMSk8PCJcbiI7CisKKyAgICBCT09TVF9URVNUKChUKSAtMSArIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkgIT0gKFQpIC0xKTsKKyAgICBpZih4MSgoVCkgLTEgKyBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgLTEpKQorICAgICAgICBzdGQ6OmNlcnI8PCJ4MSgtMSArIGVwc2lsb24pID09IHgxKC0xKSA9PSAiPDx4MSgoVCkgLTEpPDwiXG4iOworCisgICAgQk9PU1RfVEVTVCgoVCkgLTEgLSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpICE9IChUKSAtMSk7CisgICAgaWYoeDEoKFQpIC0xIC0gbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSkgPT0geDEoKFQpIC0xKSkKKyAgICAgICAgc3RkOjpjZXJyPDwieDEoLTEgLSBlcHNpbG9uKSA9PSB4MSgtMSkgPT0gIjw8eDEoKFQpIC0xKTw8IlxuIjsKKworICAgIC8vIEFzIGJlZm9yZS4KKyAgICBpZihuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aGFzX2Rlbm9ybSkgeworICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSA9PSB4MSh6ZXJvKSkgeworICAgICAgICAgICAgc3RkOjpjZXJyPDwieDEoZGVub3JtX21pbikgPT0geDEoemVybykgPT0gIjw8eDEoemVybyk8PCJcbiI7CisgICAgICAgIH0KKyNpZiAhQk9PU1RfV09SS0FST1VORChfX0RFQ0NYWF9WRVIsPDcwMTkwMDA2KSAmJiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgICAgICAvLyBUaGUgVHJ1NjQvQ1hYIHN0YW5kYXJkIGxpYnJhcnkgcHJpb3IgdG8gNy4xIGNvbnRhaW5zIGEgYnVnIGluIHRoZQorICAgICAgICAvLyBzcGVjaWFsaXphdGlvbiBvZiBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czo6ZGVub3JtX21pbigpIGZvciBsb25nCisgICAgICAgIC8vIGRvdWJsZXMgd2hpY2ggY2F1c2VzIHRoaXMgdGVzdCB0byBmYWlsLgorICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSAhPQorICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgKKyAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpjZXJyCisgICAgICAgICAgICAgICAgPDwgICJ4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSA9ICIKKyAgICAgICAgICAgICAgICA8PCAgeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmRlbm9ybV9taW4oKSkKKyAgICAgICAgICAgICAgICA8PCAgIlxuaGFzaF92YWx1ZShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKSIKKyAgICAgICAgICAgICAgICAgICAgIiA9ICIKKyAgICAgICAgICAgICAgICA8PCAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpCisgICAgICAgICAgICAgICAgPDwgICJcbngxKDApID0gIgorICAgICAgICAgICAgICAgIDw8ICB4MSgwKQorICAgICAgICAgICAgICAgIDw8ICAiXG4iOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKy8vIE5hTiBhbHNvIGNhdXNlcyBib3JsYW5kIHRvIGNyYXNoLgorI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBpZihuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aGFzX3F1aWV0X05hTikgeworICAgICAgICBpZih4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpID09IHgxKDEuMCkpIHsKKyAgICAgICAgICAgIHN0ZDo6Y2Vycjw8IngxKHF1aWV0X05hTikgPT0geDEoMS4wKSA9PSAiPDx4MSgxLjApPDwiXG4iOworICAgICAgICB9CisgICAgICAgIEJPT1NUX1RFU1QoeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OnF1aWV0X05hTigpKSA9PQorICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgKKyAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpKTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mcmllbmRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZnJpZW5kX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjkxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZnJpZW5kX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisKKy8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSB0ZXN0Cit7CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RydWN0IGN1c3RvbQorICAgIHsKKyAgICAgICAgaW50IHZhbHVlXzsKKworICAgICAgICBzdGQ6OnNpemVfdCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlXyAqIDEwOworICAgICAgICB9CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorICAgICAgICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjdXN0b20gY29uc3QmIHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4Lmhhc2goKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY3VzdG9tKGludCB4KSA6IHZhbHVlXyh4KSB7fQorICAgIH07Cit9CisKKyNpZiBkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCituYW1lc3BhY2UgbmRuYm9vc3QKK3sKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3Q6OmN1c3RvbTxUPiB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgIH0KK30KKyNlbmRpZgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGNjdHlwZT4KKwordm9pZCBjdXN0b21fdGVzdHMoKQoreworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6Y3VzdG9tPGludD4gPiBjdXN0b21faGFzaGVyOworICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcigxMCkgPT0gMTAwdSk7CisgICAgdGVzdDo6Y3VzdG9tPGludD4geCg1NSk7CisgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKHgpID09IDU1MHUpOworCisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTsKKyAgICAgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKHgpID09IGhhc2hfdmFsdWUoeCkpOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPHRlc3Q6OmN1c3RvbTxpbnQ+ID4gY3VzdG9tX3ZlY3RvcjsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjayg1KTsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjaygyNSk7CisgICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soMzUpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZCA9IDA7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbTxpbnQ+KDUpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tPGludD4oMjUpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tPGludD4oMzUpKTsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQyID0gMDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDUwdSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCAyNTB1KTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDM1MHUpOworCisgICAgQk9PU1RfVEVTVChzZWVkID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCisgICAgICAgIGN1c3RvbV92ZWN0b3IuYmVnaW4oKSwgY3VzdG9tX3ZlY3Rvci5lbmQoKSkpOworICAgIEJPT1NUX1RFU1Qoc2VlZCA9PSBzZWVkMik7Cit9CisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBjdXN0b21fdGVzdHMoKTsKKyNlbmRpZgorICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z1bmN0aW9uX3BvaW50ZXJfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZnVuY3Rpb25fcG9pbnRlcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjc4Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z1bmN0aW9uX3BvaW50ZXJfdGVzdC5jcHAKQEAgLTAsMCArMSw1NyBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSAiLi9jb21waWxlX3RpbWUuaHBwIgorCit2b2lkIHZvaWRfZnVuYzEoKSB7IHN0YXRpYyBpbnQgeCA9IDE7ICsreDsgfQordm9pZCB2b2lkX2Z1bmMyKCkgeyBzdGF0aWMgaW50IHggPSAyOyAtLXg7IH0KK2ludCBpbnRfZnVuYzEoaW50KSB7IHJldHVybiAwOyB9CitpbnQgaW50X2Z1bmMyKGludCkgeyByZXR1cm4gMTsgfQorCit2b2lkIGZ1bmN0aW9uX3BvaW50ZXJfdGVzdHMoKQoreworICAgIGNvbXBpbGVfdGltZV90ZXN0cygodm9pZCgqKikoKSkgMCk7CisgICAgY29tcGlsZV90aW1lX3Rlc3RzKChpbnQoKiopKGludCkpIDApOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx2b2lkKCopKCk+IGhhc2hlcl92b2lkOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50KCopKGludCk+IGhhc2hlcl9pbnQ7CisKKyAgICBCT09TVF9URVNUKCZ2b2lkX2Z1bmMxICE9ICZ2b2lkX2Z1bmMyKTsKKyAgICBCT09TVF9URVNUKCZpbnRfZnVuYzEgIT0gJmludF9mdW5jMik7CisKKyAgICBCT09TVF9URVNUKGhhc2hlcl92b2lkKDApID09IGhhc2hlcl92b2lkKDApKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcl92b2lkKCZ2b2lkX2Z1bmMxKSA9PSBoYXNoZXJfdm9pZCgmdm9pZF9mdW5jMSkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyX3ZvaWQoJnZvaWRfZnVuYzEpICE9IGhhc2hlcl92b2lkKCZ2b2lkX2Z1bmMyKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfdm9pZCgmdm9pZF9mdW5jMSkgIT0gaGFzaGVyX3ZvaWQoMCkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyX2ludCgwKSA9PSBoYXNoZXJfaW50KDApKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcl9pbnQoJmludF9mdW5jMSkgPT0gaGFzaGVyX2ludCgmaW50X2Z1bmMxKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KCZpbnRfZnVuYzEpICE9IGhhc2hlcl9pbnQoJmludF9mdW5jMikpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyX2ludCgmaW50X2Z1bmMxKSAhPSBoYXNoZXJfaW50KDApKTsKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIEJPT1NUX1RFU1QoaGFzaGVyX3ZvaWQoJnZvaWRfZnVuYzEpCisgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKCZ2b2lkX2Z1bmMxKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KCZpbnRfZnVuYzEpCisgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKCZpbnRfZnVuYzEpKTsKKworICAgIC8vIFRoaXMgaXNuJ3Qgc3BlY2lmaWVkIGluIFBldGVyJ3MgcHJvcG9zYWw6CisgICAgQk9PU1RfVEVTVChoYXNoZXJfdm9pZCgwKSA9PSAwKTsKKyNlbmRpZgorfQorCitpbnQgbWFpbigpCit7CisgICAgZnVuY3Rpb25fcG9pbnRlcl90ZXN0cygpOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3QuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQwMTdjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0LmhwcApAQCAtMCwwICsxLDEwNCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUykKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2hfZndkLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSB0ZXN0IHsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0cnVjdCB0ZXN0X3R5cGUxCisgICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICB0ZXN0X3R5cGUxKFQgY29uc3QmIHgpIDogdmFsdWUoeCkge30KKyAgICB9OworCisjaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3RfdHlwZTE8VD4gY29uc3QmIHgpCisgICAgeworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IGhhc2hlcjsKKyAgICAgICAgcmV0dXJuIGhhc2hlcih4LnZhbHVlKTsKKyAgICB9CisjZW5kaWYKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0cnVjdCB0ZXN0X3R5cGUyCisgICAgeworICAgICAgICBUIHZhbHVlMSwgdmFsdWUyOworICAgICAgICB0ZXN0X3R5cGUyKFQgY29uc3QmIHgsIFQgY29uc3QmIHkpIDogdmFsdWUxKHgpLCB2YWx1ZTIoeSkge30KKyAgICB9OworCisjaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3RfdHlwZTI8VD4gY29uc3QmIHgpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUxKTsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUyKTsKKyAgICAgICAgcmV0dXJuIHNlZWQ7CisgICAgfQorI2VuZGlmCisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdHJ1Y3QgdGVzdF90eXBlMworICAgIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VD4gdmFsdWVzOworICAgICAgICB0ZXN0X3R5cGUzKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvciB4LAorICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvciB5KSA6IHZhbHVlcyh4LCB5KSB7fQorICAgIH07CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdF90eXBlMzxUPiBjb25zdCYgeCkKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPQorICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LnZhbHVlcy5iZWdpbigpLCB4LnZhbHVlcy5lbmQoKSk7CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2Uoc2VlZCwgeC52YWx1ZXMuYmVnaW4oKSwgeC52YWx1ZXMuZW5kKCkpOworICAgICAgICByZXR1cm4gc2VlZDsKKyAgICB9CisjZW5kaWYKKworfQorCisjaWYgZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorCituYW1lc3BhY2UgbmRuYm9vc3QKK3sKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3Q6OnRlc3RfdHlwZTE8VD4gY29uc3QmIHgpCisgICAgeworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IGhhc2hlcjsKKyAgICAgICAgcmV0dXJuIGhhc2hlcih4LnZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3Q6OnRlc3RfdHlwZTI8VD4gY29uc3QmIHgpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUxKTsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHgudmFsdWUyKTsKKyAgICAgICAgcmV0dXJuIHNlZWQ7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZSh0ZXN0Ojp0ZXN0X3R5cGUzPFQ+IGNvbnN0JiB4KQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3Qgc2VlZCA9CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHgudmFsdWVzLmJlZ2luKCksIHgudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkLCB4LnZhbHVlcy5iZWdpbigpLCB4LnZhbHVlcy5lbmQoKSk7CisgICAgICAgIHJldHVybiBzZWVkOworICAgIH0KK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzEuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjE2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3RfMS5jcHAKQEAgLTAsMCArMSw5NiBAQAorCisvLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBUaGlzIGNoZWNrcyB0aGF0IHRlbXBsYXRlIGNvZGUgaW1wbGVtZW50ZWQgdXNpbmcgaGFzaF9md2Qgd2lsbCB3b3JrLgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaW5jbHVkZSAiLi9oYXNoX2Z3ZF90ZXN0LmhwcCIKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMpCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2luY2x1ZGUgPHN0cmluZz4KKwordm9pZCBmd2RfdGVzdDEoKQoreworICAgIHRlc3Q6OnRlc3RfdHlwZTE8aW50PiB4KDUpOworICAgIHRlc3Q6OnRlc3RfdHlwZTE8c3RkOjpzdHJpbmc+IHkoIlRlc3QiKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50PiBoYXNoZXJfaW50OworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpzdHJpbmc+IGhhc2hlcl9zdHJpbmc7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0Ojp0ZXN0X3R5cGUxPGludD4gPiBoYXNoZXJfdGVzdF9pbnQ7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0Ojp0ZXN0X3R5cGUxPHN0ZDo6c3RyaW5nPiA+IGhhc2hlcl90ZXN0X3N0cmluZzsKKworICAgIEJPT1NUX1RFU1QoaGFzaGVyX2ludCg1KSA9PSBoYXNoZXJfdGVzdF9pbnQoeCkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyX3N0cmluZygiVGVzdCIpID09IGhhc2hlcl90ZXN0X3N0cmluZyh5KSk7Cit9CisKK3ZvaWQgZndkX3Rlc3QyKCkKK3sKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUyPGludD4geCg1LCAxMCk7CisgICAgdGVzdDo6dGVzdF90eXBlMjxzdGQ6OnN0cmluZz4geSgiVGVzdDEiLCAiVGVzdDIiKTsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQxID0gMDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDEsIDUpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMSwgMTApOworCisgICAgc3RkOjpzaXplX3Qgc2VlZDIgPSAwOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgc3RkOjpzdHJpbmcoIlRlc3QxIikpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgc3RkOjpzdHJpbmcoIlRlc3QyIikpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0Ojp0ZXN0X3R5cGUyPGludD4gPiBoYXNoZXJfdGVzdF9pbnQ7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0Ojp0ZXN0X3R5cGUyPHN0ZDo6c3RyaW5nPiA+IGhhc2hlcl90ZXN0X3N0cmluZzsKKworICAgIEJPT1NUX1RFU1Qoc2VlZDEgPT0gaGFzaGVyX3Rlc3RfaW50KHgpKTsKKyAgICBCT09TVF9URVNUKHNlZWQyID09IGhhc2hlcl90ZXN0X3N0cmluZyh5KSk7Cit9CisKK3ZvaWQgZndkX3Rlc3QzKCkKK3sKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHZhbHVlczE7CisgICAgdmFsdWVzMS5wdXNoX2JhY2soMTApOworICAgIHZhbHVlczEucHVzaF9iYWNrKDE1KTsKKyAgICB2YWx1ZXMxLnB1c2hfYmFjaygyMCk7CisgICAgdmFsdWVzMS5wdXNoX2JhY2soMyk7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmFsdWVzMjsKKyAgICB2YWx1ZXMyLnB1c2hfYmFjaygiQ2hpY28iKTsKKyAgICB2YWx1ZXMyLnB1c2hfYmFjaygiR3JvdWNobyIpOworICAgIHZhbHVlczIucHVzaF9iYWNrKCJIYXJwbyIpOworICAgIHZhbHVlczIucHVzaF9iYWNrKCJHdW1tbyIpOworICAgIHZhbHVlczIucHVzaF9iYWNrKCJaZXBwbyIpOworCisgICAgdGVzdDo6dGVzdF90eXBlMzxpbnQ+IHgodmFsdWVzMS5iZWdpbigpLCB2YWx1ZXMxLmVuZCgpKTsKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUzPHN0ZDo6c3RyaW5nPiB5KHZhbHVlczIuYmVnaW4oKSwgdmFsdWVzMi5lbmQoKSk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkMSA9CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMS5iZWdpbigpLCB2YWx1ZXMxLmVuZCgpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHNlZWQxLCB2YWx1ZXMxLmJlZ2luKCksIHZhbHVlczEuZW5kKCkpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZDIgPQorICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczIuYmVnaW4oKSwgdmFsdWVzMi5lbmQoKSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkMiwgdmFsdWVzMi5iZWdpbigpLCB2YWx1ZXMyLmVuZCgpKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6dGVzdF90eXBlMzxpbnQ+ID4gaGFzaGVyX3Rlc3RfaW50OworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8dGVzdDo6dGVzdF90eXBlMzxzdGQ6OnN0cmluZz4gPiBoYXNoZXJfdGVzdF9zdHJpbmc7CisKKyAgICBCT09TVF9URVNUKHNlZWQxID09IGhhc2hlcl90ZXN0X2ludCh4KSk7CisgICAgQk9PU1RfVEVTVChzZWVkMiA9PSBoYXNoZXJfdGVzdF9zdHJpbmcoeSkpOworfQorCisjZW5kaWYKKworaW50IG1haW4oKQoreworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisgICAgZndkX3Rlc3QxKCk7CisgICAgZndkX3Rlc3QyKCk7CisgICAgZndkX3Rlc3QzKCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdF8yLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdF8yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGY5OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzIuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKworLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gVGhpcyB0ZXN0IGp1c3QgbWFrZXMgc3VyZSBhIGhlYWRlciB3aGljaCB1c2VzIGhhc2hfZndkIGNhbiBjb21waWxlIHdpdGhvdXQKKy8vIHRoZSBtYWluIGhhc2ggaGVhZGVycy4KKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmICFkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSB8fCBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMpCisKK2ludCBtYWluKCkge30KKworI2Vsc2UKKworI2luY2x1ZGUgIi4vaGFzaF9md2RfdGVzdC5ocHAiCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9pZCB1bnVzZWQoVCBjb25zdCYpIHt9CisKK3ZvaWQgZndkX3Rlc3QoKQoreworICAgIHRlc3Q6OnRlc3RfdHlwZTE8aW50PiB4MSgzKTsKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUxPHN0ZDo6c3RyaW5nPiB5MSgiQmxhY2siKTsKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUyPGludD4geDIoMjUsIDE2KTsKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUyPHN0ZDo6c3RyaW5nPiB5MigiV2hpdGUiLCAiR3JlZW4iKTsKKworICAgIHN0ZDo6dmVjdG9yPGludD4gZW1wdHk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVtcHR5MjsKKworICAgIHRlc3Q6OnRlc3RfdHlwZTM8aW50PiB4MyhlbXB0eS5iZWdpbigpLCBlbXB0eS5lbmQoKSk7CisgICAgdGVzdDo6dGVzdF90eXBlMzxzdGQ6OnN0cmluZz4geTMoZW1wdHkyLmJlZ2luKCksIGVtcHR5Mi5lbmQoKSk7CisKKyAgICAvLyBQcmV2ZW50IGdjYyB3YXJuaW5nczoKKyAgICB1bnVzZWQoeDEpOyB1bnVzZWQoeDIpOyB1bnVzZWQoeDMpOworICAgIHVudXNlZCh5MSk7IHVudXNlZCh5Mik7IHVudXNlZCh5Myk7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgICBmd2RfdGVzdCgpOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKKyNlbmRpZiAvLyBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTKQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2dsb2JhbF9uYW1lc3BhY2VfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZ2xvYmFsX25hbWVzcGFjZV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjZjOGRkCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2dsb2JhbF9uYW1lc3BhY2VfdGVzdC5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKworLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBhbiBBREwgYnVnIGluIEJvcmxhbmQgNS41IHdoZXJlIEFETCBpc24ndCBwZXJmb3JtZWQKKy8vIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorCitzdHJ1Y3QgY3VzdG9tCit7CisgICAgaW50IHZhbHVlXzsKKworICAgIHN0ZDo6c2l6ZV90IGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlXyAqIDEwOworICAgIH0KKworI2lmICFkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCisgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tIGNvbnN0JiB4ICkKKyAgICB7CisgICAgICAgIHJldHVybiB4Lmhhc2goKTsKKyAgICB9CisjZW5kaWYKKworICAgIGN1c3RvbShpbnQgeCkgOiB2YWx1ZV8oeCkge30KK307CisKKyNpZiBkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCituYW1lc3BhY2UgbmRuYm9vc3QKK3sKKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGN1c3RvbSB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgIH0KK30KKyNlbmRpZgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGNjdHlwZT4KKwordm9pZCBjdXN0b21fdGVzdHMoKQoreworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8Y3VzdG9tPiBjdXN0b21faGFzaGVyOworICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcigxMCkgPT0gMTAwdSk7CisgICAgY3VzdG9tIHgoNTUpOworICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcih4KSA9PSA1NTB1KTsKKworICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U7CisgICAgICAgIEJPT1NUX1RFU1QoY3VzdG9tX2hhc2hlcih4KSA9PSBoYXNoX3ZhbHVlKHgpKTsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxjdXN0b20+IGN1c3RvbV92ZWN0b3I7CisgICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soNSk7CisgICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soMjUpOworICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDM1KTsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCBjdXN0b20oNSkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCBjdXN0b20oMjUpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgY3VzdG9tKDM1KSk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkMiA9IDA7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCA1MHUpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgMjUwdSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCAzNTB1KTsKKworICAgIEJPT1NUX1RFU1Qoc2VlZCA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKAorICAgICAgICBjdXN0b21fdmVjdG9yLmJlZ2luKCksIGN1c3RvbV92ZWN0b3IuZW5kKCkpKTsKKyAgICBCT09TVF9URVNUKHNlZWQgPT0gc2VlZDIpOworfQorCisjZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBjdXN0b21fdGVzdHMoKTsKKyNlbmRpZgorICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbGlzdF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9saXN0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTRhODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbGlzdF90ZXN0LmNwcApAQCAtMCwwICsxLDM1IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPGxpc3Q+CisKK3VzaW5nIHN0ZDo6bGlzdDsKKyNkZWZpbmUgQ09OVEFJTkVSX1RZUEUgbGlzdAorI2luY2x1ZGUgIi4vaGFzaF9zZXF1ZW5jZV90ZXN0LmhwcCIKKworI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIGxpc3RfdGVzdHM6Omxpc3RfaGFzaF9pbnRlZ2VyX3Rlc3RzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2xvbmdfZG91YmxlX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2xvbmdfZG91YmxlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTIxODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbG9uZ19kb3VibGVfdGVzdC5jcHAKQEAgLTAsMCArMSwxNyBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiaGFzaF9mbG9hdF90ZXN0LmhwcCIKKworaW50IG1haW4oKQoreworICAgIHN0ZDo6Y2Vycjw8IkNvbXBpbGVyOiAiPDxCT09TVF9DT01QSUxFUjw8IlxuIjsKKyAgICBzdGQ6OmNlcnI8PCJQbGF0Zm9ybTogIjw8Qk9PU1RfUExBVEZPUk08PCJcbiI7CisgICAgc3RkOjpjZXJyPDwiTGlicmFyeTogIjw8Qk9PU1RfU1RETElCPDwiXG5cbiI7CisKKyAgICBmbG9hdF90ZXN0cygibG9uZyBkb3VibGUiLCAobG9uZyBkb3VibGUqKSAwKTsKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9tYXBfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4MzVjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9tYXBfdGVzdC5jcHAKQEAgLTAsMCArMSw0MCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2luY2x1ZGUgPG1hcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK3VzaW5nIHN0ZDo6bWFwOworI2RlZmluZSBDT05UQUlORVJfVFlQRSBtYXAKKyNpbmNsdWRlICIuL2hhc2hfbWFwX3Rlc3QuaHBwIgorCit1c2luZyBzdGQ6Om11bHRpbWFwOworI2RlZmluZSBDT05UQUlORVJfVFlQRSBtdWx0aW1hcAorI2luY2x1ZGUgIi4vaGFzaF9tYXBfdGVzdC5ocHAiCisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBtYXBfdGVzdHM6Om1hcF9oYXNoX2ludGVnZXJfdGVzdHMoKTsKKyAgICBtdWx0aW1hcF90ZXN0czo6bXVsdGltYXBfaGFzaF9pbnRlZ2VyX3Rlc3RzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9tYXBfdGVzdC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiYjJmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9tYXBfdGVzdC5ocHAKQEAgLTAsMCArMSw3NiBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaWYgIWRlZmluZWQoQ09OVEFJTkVSX1RZUEUpCisjZXJyb3IgIkNPTlRBSU5FUl9UWVBFIG5vdCBkZWZpbmVkIgorI2Vsc2UKKworI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0KSAvLyBjb252ZXJzaW9uIGZyb20gJ2ludCcgdG8gJ2Zsb2F0JworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkgLy8gc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoCisjZW5kaWYKKworbmFtZXNwYWNlIEJPT1NUX1BQX0NBVChDT05UQUlORVJfVFlQRSwgX3Rlc3RzKQoreworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHZvaWQgaW50ZWdlcl90ZXN0cyhUKiA9IDApCisgICAgeworICAgICAgICBjb25zdCBpbnQgbnVtYmVyX29mX2NvbnRhaW5lcnMgPSAxMDsKKyAgICAgICAgVCBjb250YWluZXJzW251bWJlcl9vZl9jb250YWluZXJzXTsKKyAgICAgICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIFQ6OnZhbHVlX3R5cGUgcGFpcjsKKyAgICAgICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIFQ6OmtleV90eXBlIGtleTsKKyAgICAgICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIFQ6Om1hcHBlZF90eXBlIHZhbHVlOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBpOyArK2opCisgICAgICAgICAgICAgICAgY29udGFpbmVyc1tpXS5pbnNlcnQocGFpcihrZXkoMCksIHZhbHVlKDApKSk7CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXJzWzZdLmluc2VydChwYWlyKGtleSgxKSx2YWx1ZSgwKSkpOworICAgICAgICBjb250YWluZXJzWzddLmluc2VydChwYWlyKGtleSgxKSx2YWx1ZSgwKSkpOworICAgICAgICBjb250YWluZXJzWzddLmluc2VydChwYWlyKGtleSgxKSx2YWx1ZSgwKSkpOworICAgICAgICBjb250YWluZXJzWzhdLmluc2VydChwYWlyKGtleSgtMSksdmFsdWUoMSkpKTsKKyAgICAgICAgY29udGFpbmVyc1s5XS5pbnNlcnQocGFpcihrZXkoLTEpLHZhbHVlKDMpKSk7CisgICAgICAgIGNvbnRhaW5lcnNbOV0uaW5zZXJ0KHBhaXIoa2V5KC0xKSx2YWx1ZSgzKSkpOworCisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gaGFzaGVyOworCisgICAgICAgIGZvcihpbnQgaTIgPSAwOyBpMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2kyKSB7CisgICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0gaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSk7CisKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PQorICAgICAgICAgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGNvbnRhaW5lcnNbaTJdKSk7CisKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKQorICAgICAgICAgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyc1tpMl0uYmVnaW4oKSwgY29udGFpbmVyc1tpMl0uZW5kKCkpKTsKKworICAgICAgICAgICAgZm9yKGludCBqMiA9IGkyICsgMTsgajIgPCBudW1iZXJfb2ZfY29udGFpbmVyczsgKytqMikgeworICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoCisgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVyc1tpMl0gPT0gY29udGFpbmVyc1tqMl0pID09CisgICAgICAgICAgICAgICAgICAgICAgICAoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tqMl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfaGFzaF9pbnRlZ2VyX3Rlc3RzKCkpCisgICAgeworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxjaGFyLCB1bnNpZ25lZCBjaGFyPiopIDApOworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxpbnQsIGZsb2F0PiopIDApOworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTx1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nPiopIDApOworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxkb3VibGUsIHNob3J0PiopIDApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKworI3VuZGVmIENPTlRBSU5FUl9UWVBFCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfZmFpbF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfZmFpbF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDE2MzZlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9mYWlsX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjggQEAKKworLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworLy8gU2ltcGxlIHRlc3QgdG8gbWFrZSBzdXJlIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyBkb2VzIGRpc2FibGUgZXh0ZW5zaW9ucworLy8gKG9yIGF0IGxlYXN0IG9uZSBvZiB0aGVtKS4KKyNpZiAhZGVmaW5lZChCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMpCisjICBkZWZpbmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCisjZW5kaWYKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9pZCBpZ25vcmUoVCBjb25zdCYpIHt9CisKK2ludCBtYWluKCkKK3sKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPCBpbnRbMTBdID4gaGFzaGVyOworICAgIGlnbm9yZShoYXNoZXIpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X21hY3JvXzEuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18xLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRmYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18xLmNwcApAQCAtMCwwICsxLDM3IEBACisKKy8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorCisvLyBJbmNsdWRlIGhlYWRlciB3aXRob3V0IEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyBkZWZpbmVkCisjICBpZiBkZWZpbmVkKEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUykKKyMgICAgdW5kZWYgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCisjICBlbmRpZgorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKworLy8gSW5jbHVkZSBoZWFkZXIgd2l0aCBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgZGVmaW5lZAorIyAgZGVmaW5lIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUworIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGRlcXVlPgorCitpbnQgbWFpbigpCit7CisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBzdGQ6OmRlcXVlPGludD4geDsKKworICAgIHgucHVzaF9iYWNrKDEpOworICAgIHgucHVzaF9iYWNrKDIpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OmRlcXVlPGludD4gPiBoYXNoZXI7CisgICAgQk9PU1RfVEVTVChoYXNoZXIoeCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh4KSk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18yLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfbWFjcm9fMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiNDIyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfbWFjcm9fMi5jcHAKQEAgLTAsMCArMSwzNyBAQAorCisvLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKworLy8gSW5jbHVkZSBoZWFkZXIgd2l0aCBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgZGVmaW5lZAorIyAgaWYgIWRlZmluZWQoQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TKQorIyAgICBkZWZpbmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCisjICBlbmRpZgorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKworLy8gSW5jbHVkZSBoZWFkZXIgd2l0aG91dCBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMgZGVmaW5lZAorIyAgdW5kZWYgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSA8bWFwPgorCitpbnQgbWFpbigpCit7CisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBzdGQ6Om1hcDxpbnQsIGludD4geDsKKworICAgIHguaW5zZXJ0KHN0ZDo6bWFwPGludCwgaW50Pjo6dmFsdWVfdHlwZSg1MywgLTQyKSk7CisgICAgeC5pbnNlcnQoc3RkOjptYXA8aW50LCBpbnQ+Ojp2YWx1ZV90eXBlKDE0LCAtNzUpKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjptYXA8aW50LCBpbnQ+ID4gaGFzaGVyOworICAgIEJPT1NUX1RFU1QoaGFzaGVyKHgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoeCkpOworI2VuZGlmCisgICAgCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbnVtYmVyX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX251bWJlcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGNhNmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX251bWJlcl90ZXN0LmNwcApAQCAtMCwwICsxLDE5NiBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2gvZGV0YWlsL2xpbWl0cy5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvdXRpbGl0eS9lbmFibGVfaWYuaHBwPgorCisjaW5jbHVkZSAiLi9jb21waWxlX3RpbWUuaHBwIgorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MTI3KSAvLyBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MzA5KSAvLyB0cnVuY2F0aW9uIG9mIGNvbnN0YW50IHZhbHVlCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MzEwKSAvLyBjYXN0IHRydW5jYXRlcyBjb25zdGFudCB2YWx1ZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChCT09TVF9JTlRFTF9DWFhfVkVSU0lPTikKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmbG9hdC1lcXVhbCIKKyNlbmRpZgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgbnVtZXJpY19leHRyYV90ZXN0cyh0eXBlbmFtZQorICAgIG5kbmJvb3N0OjplbmFibGVfaWZfYzxuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aXNfaW50ZWdlciwKKyAgICAgICAgdm9pZCo+Ojp0eXBlID0gMCkKK3sKKyAgICB0eXBlZGVmIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+IGxpbWl0czsKKworICAgIGlmKGxpbWl0czo6aXNfc2lnbmVkIHx8CisgICAgICAgIGxpbWl0czo6ZGlnaXRzIDw9IG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPHN0ZDo6c2l6ZV90Pjo6ZGlnaXRzKQorICAgIHsKKyAgICAgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoLTUpKSA9PSAoc3RkOjpzaXplX3QpVCgtNSkpOworICAgIH0KKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgwKSkgPT0gKHN0ZDo6c2l6ZV90KVQoMHUpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgxMCkpID09IChzdGQ6OnNpemVfdClUKDEwdSkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShUKDI1KSkgPT0gKHN0ZDo6c2l6ZV90KVQoMjV1KSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBudW1lcmljX2V4dHJhX3Rlc3RzKHR5cGVuYW1lCisgICAgbmRuYm9vc3Q6OmRpc2FibGVfaWZfYzxuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aXNfaW50ZWdlciwKKyAgICAgICAgdm9pZCo+Ojp0eXBlID0gMCkKK3sKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIG51bWVyaWNfdGVzdChUKikKK3sKKyAgICB0eXBlZGVmIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+IGxpbWl0czsKKworICAgIGNvbXBpbGVfdGltZV90ZXN0cygoVCopIDApOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiB4MTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHgyOworCisgICAgVCB2MSA9IChUKSAtNTsKKyAgICBCT09TVF9URVNUKHgxKHYxKSA9PSB4Mih2MSkpOworICAgIEJPT1NUX1RFU1QoeDEoVCgtNSkpID09IHgyKFQoLTUpKSk7CisgICAgQk9PU1RfVEVTVCh4MShUKDApKSA9PSB4MihUKDApKSk7CisgICAgQk9PU1RfVEVTVCh4MShUKDEwKSkgPT0geDIoVCgxMCkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoMjUpKSA9PSB4MihUKDI1KSkpOworICAgIEJPT1NUX1RFU1QoeDEoVCg1KSAtIFQoNSkpID09IHgyKFQoMCkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoNikgKyBUKDQpKSA9PSB4MihUKDEwKSkpOworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBCT09TVF9URVNUKHgxKFQoLTUpKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoLTUpKSk7CisgICAgQk9PU1RfVEVTVCh4MShUKDApKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoMCkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoMTApKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoMTApKSk7CisgICAgQk9PU1RfVEVTVCh4MShUKDI1KSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShUKDI1KSkpOworCisgICAgbnVtZXJpY19leHRyYV90ZXN0czxUPigpOworI2VuZGlmCit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBsaW1pdHNfdGVzdChUKikKK3sKKyAgICB0eXBlZGVmIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+IGxpbWl0czsKKworICAgIGlmKGxpbWl0czo6aXNfc3BlY2lhbGl6ZWQpCisgICAgeworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHgxOworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHgyOworCisgICAgICAgIFQgbWluX3ZhbHVlID0gKGxpbWl0czo6bWluKSgpOworICAgICAgICBUIG1heF92YWx1ZSA9IChsaW1pdHM6Om1heCkoKTsKKworICAgICAgICBCT09TVF9URVNUKHgxKG1pbl92YWx1ZSkgPT0geDIoKGxpbWl0czo6bWluKSgpKSk7CisgICAgICAgIEJPT1NUX1RFU1QoeDEobWF4X3ZhbHVlKSA9PSB4MigobGltaXRzOjptYXgpKCkpKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgICAgIEJPT1NUX1RFU1QoeDEobWluX3ZhbHVlKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1pbl92YWx1ZSkpOworICAgICAgICBCT09TVF9URVNUKHgxKG1heF92YWx1ZSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtYXhfdmFsdWUpKTsKKworICAgICAgICBpZiAobGltaXRzOjppc19pbnRlZ2VyKQorICAgICAgICB7CisgICAgICAgICAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUobWluX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICA9PSBzdGQ6OnNpemVfdChtaW5fdmFsdWUpKTsKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtYXhfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgID09IHN0ZDo6c2l6ZV90KG1heF92YWx1ZSkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBwb29yX3F1YWxpdHlfdGVzdHMoVCopCit7CisgICAgdHlwZWRlZiBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPiBsaW1pdHM7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDI7CisKKyAgICAvLyBBIGhhc2ggZnVuY3Rpb24gY2FuIGxlZ2FsbHkgZmFpbCB0aGVzZSB0ZXN0cywgYnV0IGl0J2xsIG5vdCBiZSBhIGdvb2QKKyAgICAvLyBzaWduLgorICAgIGlmKFQoMSkgIT0gVCgtMSkpCisgICAgICAgIEJPT1NUX1RFU1QoeDEoVCgxKSkgIT0gIHgyKFQoLTEpKSk7CisgICAgaWYoVCgxKSAhPSBUKDIpKQorICAgICAgICBCT09TVF9URVNUKHgxKFQoMSkpICE9ICB4MihUKDIpKSk7CisgICAgaWYoKGxpbWl0czo6bWF4KSgpICE9IChsaW1pdHM6Om1heCkoKSAtIDEpCisgICAgICAgIEJPT1NUX1RFU1QoeDEoc3RhdGljX2Nhc3Q8VD4oKGxpbWl0czo6bWF4KSgpKSkKKyAgICAgICAgICAgICE9IHgyKHN0YXRpY19jYXN0PFQ+KChsaW1pdHM6Om1heCkoKSAtIDEpKSk7Cit9CisKK3ZvaWQgYm9vbF90ZXN0KCkKK3sKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGJvb2w+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8Ym9vbD4geDI7CisgICAgCisgICAgQk9PU1RfVEVTVCh4MSh0cnVlKSA9PSB4Mih0cnVlKSk7CisgICAgQk9PU1RfVEVTVCh4MShmYWxzZSkgPT0geDIoZmFsc2UpKTsKKyAgICBCT09TVF9URVNUKHgxKHRydWUpICE9IHgyKGZhbHNlKSk7CisgICAgQk9PU1RfVEVTVCh4MShmYWxzZSkgIT0geDIodHJ1ZSkpOworfQorCisjZGVmaW5lIE5VTUVSSUNfVEVTVCh0eXBlLCBuYW1lKSBcCisgICAgc3RkOjpjZXJyPDwiVGVzdGluZzogIiBCT09TVF9TVFJJTkdJWkUobmFtZSkgIlxuIjsgXAorICAgIG51bWVyaWNfdGVzdCgodHlwZSopIDApOyBcCisgICAgbGltaXRzX3Rlc3QoKHR5cGUqKSAwKTsgXAorICAgIHBvb3JfcXVhbGl0eV90ZXN0cygodHlwZSopIDApOworI2RlZmluZSBOVU1FUklDX1RFU1RfTk9fTElNSVRTKHR5cGUsIG5hbWUpIFwKKyAgICBzdGQ6OmNlcnI8PCJUZXN0aW5nOiAiIEJPT1NUX1NUUklOR0laRShuYW1lKSAiXG4iOyBcCisgICAgbnVtZXJpY190ZXN0KCh0eXBlKikgMCk7IFwKKyAgICBwb29yX3F1YWxpdHlfdGVzdHMoKHR5cGUqKSAwKTsKKworaW50IG1haW4oKQoreworICAgIE5VTUVSSUNfVEVTVChjaGFyLCBjaGFyKQorICAgIE5VTUVSSUNfVEVTVChzaWduZWQgY2hhciwgc2NoYXIpCisgICAgTlVNRVJJQ19URVNUKHVuc2lnbmVkIGNoYXIsIHVjaGFyKQorI2lmbmRlZiBCT09TVF9OT19JTlRSSU5TSUNfV0NIQVJfVAorICAgIE5VTUVSSUNfVEVTVCh3Y2hhcl90LCB3Y2hhcikKKyNlbmRpZgorICAgIE5VTUVSSUNfVEVTVChzaG9ydCwgc2hvcnQpCisgICAgTlVNRVJJQ19URVNUKHVuc2lnbmVkIHNob3J0LCB1c2hvcnQpCisgICAgTlVNRVJJQ19URVNUKGludCwgaW50KQorICAgIE5VTUVSSUNfVEVTVCh1bnNpZ25lZCBpbnQsIHVpbnQpCisgICAgTlVNRVJJQ19URVNUKGxvbmcsIGhhc2hfbG9uZykKKyAgICBOVU1FUklDX1RFU1QodW5zaWduZWQgbG9uZywgdWxvbmcpCisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19MT05HX0xPTkcpCisgICAgTlVNRVJJQ19URVNUX05PX0xJTUlUUyhuZG5ib29zdDo6bG9uZ19sb25nX3R5cGUsIGxvbmdfbG9uZykKKyAgICBOVU1FUklDX1RFU1RfTk9fTElNSVRTKG5kbmJvb3N0Ojp1bG9uZ19sb25nX3R5cGUsIHVsb25nX2xvbmcpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTX0lOVDEyOCkKKyAgICBOVU1FUklDX1RFU1RfTk9fTElNSVRTKG5kbmJvb3N0OjppbnQxMjhfdHlwZSwgaW50MTI4KQorICAgIE5VTUVSSUNfVEVTVF9OT19MSU1JVFMobmRuYm9vc3Q6OnVpbnQxMjhfdHlwZSwgdWludDEyOCkKKyNlbmRpZgorCisgICAgTlVNRVJJQ19URVNUKGZsb2F0LCBmbG9hdCkKKyAgICBOVU1FUklDX1RFU1QoZG91YmxlLCBkb3VibGUpCisKKyAgICBOVU1FUklDX1RFU1Qoc3RkOjpzaXplX3QsIHNpemVfdCkKKyAgICBOVU1FUklDX1RFU1Qoc3RkOjpwdHJkaWZmX3QsIHB0cmRpZmZfdCkKKworICAgIGJvb2xfdGVzdCgpOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKKyNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfcG9pbnRlcl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9wb2ludGVyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjA2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfcG9pbnRlcl90ZXN0LmNwcApAQCAtMCwwICsxLDQ1IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgorI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKKwordm9pZCBwb2ludGVyX3Rlc3RzKCkKK3sKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKGludCoqKSAwKTsKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKHZvaWQqKikgMCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludCo+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4geDI7CisKKyAgICBpbnQgaW50MTsKKyAgICBpbnQgaW50MjsKKworICAgIEJPT1NUX1RFU1QoeDEoMCkgPT0geDIoMCkpOworICAgIEJPT1NUX1RFU1QoeDEoJmludDEpID09IHgyKCZpbnQxKSk7CisgICAgQk9PU1RfVEVTVCh4MSgmaW50MikgPT0geDIoJmludDIpKTsKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIEJPT1NUX1RFU1QoeDEoJmludDEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJmludDEpKTsKKyAgICBCT09TVF9URVNUKHgxKCZpbnQyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKCZpbnQyKSk7CisKKyAgICAvLyBUaGlzIGlzbid0IHNwZWNpZmllZCBpbiBQZXRlcidzIHByb3Bvc2FsOgorICAgIEJPT1NUX1RFU1QoeDEoMCkgPT0gMCk7CisjZW5kaWYKK30KKworaW50IG1haW4oKQoreworICAgIHBvaW50ZXJfdGVzdHMoKTsKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9yYW5nZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9yYW5nZV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDkyMzlhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3JhbmdlX3Rlc3QuY3BwCkBAIC0wLDAgKzEsODUgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmICFkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorCitpbnQgbWFpbigpIHt9CisKKyNlbHNlCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwordm9pZCBoYXNoX3JhbmdlX3Rlc3RzKCkKK3sKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IGVtcHR5LCB2YWx1ZXMxLCB2YWx1ZXMyLCB2YWx1ZXMzLCB2YWx1ZXM0LCB2YWx1ZXM1OworICAgIHZhbHVlczEucHVzaF9iYWNrKDApOworICAgIHZhbHVlczIucHVzaF9iYWNrKDEwKTsKKyAgICB2YWx1ZXMzLnB1c2hfYmFjaygxMCk7CisgICAgdmFsdWVzMy5wdXNoX2JhY2soMjApOworICAgIHZhbHVlczQucHVzaF9iYWNrKDE1KTsKKyAgICB2YWx1ZXM0LnB1c2hfYmFjayg3NSk7CisgICAgdmFsdWVzNS5wdXNoX2JhY2soMTApOworICAgIHZhbHVlczUucHVzaF9iYWNrKDIwKTsKKyAgICB2YWx1ZXM1LnB1c2hfYmFjaygxNSk7CisgICAgdmFsdWVzNS5wdXNoX2JhY2soNzUpOworICAgIHZhbHVlczUucHVzaF9iYWNrKDEwKTsKKyAgICB2YWx1ZXM1LnB1c2hfYmFjaygyMCk7CisKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHg7CisKKyAgICBzdGQ6OnNpemVfdCB4X3NlZWQgPSAwOworICAgIEJPT1NUX1RFU1QoeF9zZWVkID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoZW1wdHkuYmVnaW4oKSwgZW1wdHkuZW5kKCkpCisgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGVtcHR5LmJlZ2luKCksIGVtcHR5LmVuZCgpKQorICAgICAgICAhPSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczEuYmVnaW4oKSwgdmFsdWVzMS5lbmQoKSkpOworCisgICAgeC5wdXNoX2JhY2soMTApOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZSh4X3NlZWQsIDEwKTsKKyAgICBCT09TVF9URVNUKHhfc2VlZCA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOworCisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKGVtcHR5LmJlZ2luKCksIGVtcHR5LmVuZCgpKQorICAgICAgICAhPSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMyLmJlZ2luKCksIHZhbHVlczIuZW5kKCkpCisgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisKKyAgICB4LnB1c2hfYmFjaygyMCk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHhfc2VlZCwgMjApOworICAgIEJPT1NUX1RFU1QoeF9zZWVkID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoZW1wdHkuYmVnaW4oKSwgZW1wdHkuZW5kKCkpCisgICAgICAgICE9IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczIuYmVnaW4oKSwgdmFsdWVzMi5lbmQoKSkKKyAgICAgICAgIT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMy5iZWdpbigpLCB2YWx1ZXMzLmVuZCgpKQorICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZCA9CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMy5iZWdpbigpLCB2YWx1ZXMzLmVuZCgpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHNlZWQsIHZhbHVlczQuYmVnaW4oKSwgdmFsdWVzNC5lbmQoKSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkLCB4LmJlZ2luKCksIHguZW5kKCkpOworICAgIEJPT1NUX1RFU1Qoc2VlZCA9PQorICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczUuYmVnaW4oKSwgdmFsdWVzNS5lbmQoKSkpOworfQorCitpbnQgbWFpbigpCit7CisgICAgaGFzaF9yYW5nZV90ZXN0cygpOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKKyNlbmRpZiAvLyBURVNUX0VYVEVTTklPTlMKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zZXF1ZW5jZV90ZXN0LmhwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zZXF1ZW5jZV90ZXN0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg0NmIwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NlcXVlbmNlX3Rlc3QuaHBwCkBAIC0wLDAgKzEsNzYgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2lmICFkZWZpbmVkKENPTlRBSU5FUl9UWVBFKQorI2Vycm9yICJDT05UQUlORVJfVFlQRSBub3QgZGVmaW5lZCIKKyNlbHNlCisKKyNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkgLy8gc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoCisjZW5kaWYKKworbmFtZXNwYWNlIEJPT1NUX1BQX0NBVChDT05UQUlORVJfVFlQRSwgX3Rlc3RzKQoreworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHZvaWQgaW50ZWdlcl90ZXN0cyhUKiA9IDApCisgICAgeworICAgICAgICBjb25zdCBpbnQgbnVtYmVyX29mX2NvbnRhaW5lcnMgPSAxMTsKKyAgICAgICAgVCBjb250YWluZXJzW251bWJlcl9vZl9jb250YWluZXJzXTsKKworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgaTsgKytqKQorICAgICAgICAgICAgICAgIGNvbnRhaW5lcnNbaV0ucHVzaF9iYWNrKDApOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyc1s1XS5wdXNoX2JhY2soMSk7CisgICAgICAgIGNvbnRhaW5lcnNbNl0ucHVzaF9iYWNrKDEpOworICAgICAgICBjb250YWluZXJzWzZdLnB1c2hfYmFjaygxKTsKKyAgICAgICAgY29udGFpbmVyc1s3XS5wdXNoX2JhY2soLTEpOworICAgICAgICBjb250YWluZXJzWzhdLnB1c2hfYmFjaygtMSk7CisgICAgICAgIGNvbnRhaW5lcnNbOF0ucHVzaF9iYWNrKC0xKTsKKyAgICAgICAgY29udGFpbmVyc1s5XS5wdXNoX2JhY2soMSk7CisgICAgICAgIGNvbnRhaW5lcnNbOV0ucHVzaF9iYWNrKC0xKTsKKyAgICAgICAgY29udGFpbmVyc1sxMF0ucHVzaF9iYWNrKC0xKTsKKyAgICAgICAgY29udGFpbmVyc1sxMF0ucHVzaF9iYWNrKDEpOworCisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gaGFzaGVyOworCisgICAgICAgIGZvcihpbnQgaTIgPSAwOyBpMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2kyKSB7CisgICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0gaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSk7CisKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PQorICAgICAgICAgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGNvbnRhaW5lcnNbaTJdKSk7CisKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKQorICAgICAgICAgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyc1tpMl0uYmVnaW4oKSwgY29udGFpbmVyc1tpMl0uZW5kKCkpKTsKKworICAgICAgICAgICAgZm9yKGludCBqMiA9IGkyICsgMTsgajIgPCBudW1iZXJfb2ZfY29udGFpbmVyczsgKytqMikgeworICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoCisgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVyc1tpMl0gPT0gY29udGFpbmVyc1tqMl0pID09CisgICAgICAgICAgICAgICAgICAgICAgICAoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tqMl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfaGFzaF9pbnRlZ2VyX3Rlc3RzKCkpCisgICAgeworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxjaGFyPiopIDApOworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxpbnQ+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPHVuc2lnbmVkIGxvbmc+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGRvdWJsZT4qKSAwKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKKyN1bmRlZiBDT05UQUlORVJfVFlQRQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NldF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ0ZTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NldF90ZXN0LmNwcApAQCAtMCwwICsxLDQwIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPHNldD4KKwordXNpbmcgc3RkOjpzZXQ7CisjZGVmaW5lIENPTlRBSU5FUl9UWVBFIHNldAorI2luY2x1ZGUgIi4vaGFzaF9zZXRfdGVzdC5ocHAiCisKK3VzaW5nIHN0ZDo6bXVsdGlzZXQ7CisjZGVmaW5lIENPTlRBSU5FUl9UWVBFIG11bHRpc2V0CisjaW5jbHVkZSAiLi9oYXNoX3NldF90ZXN0LmhwcCIKKworI2VuZGlmCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIHNldF90ZXN0czo6c2V0X2hhc2hfaW50ZWdlcl90ZXN0cygpOworICAgIG11bHRpc2V0X3Rlc3RzOjptdWx0aXNldF9oYXNoX2ludGVnZXJfdGVzdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NldF90ZXN0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ0OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NldF90ZXN0LmhwcApAQCAtMCwwICsxLDc5IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpZiAhZGVmaW5lZChDT05UQUlORVJfVFlQRSkKKyNlcnJvciAiQ09OVEFJTkVSX1RZUEUgbm90IGRlZmluZWQiCisjZWxzZQorCisjaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+CisKKyNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDUpIC8vIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaAorI2VuZGlmCisKK25hbWVzcGFjZSBCT09TVF9QUF9DQVQoQ09OVEFJTkVSX1RZUEUsIF90ZXN0cykKK3sKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICB2b2lkIGludGVnZXJfdGVzdHMoVCogPSAwKQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IG51bWJlcl9vZl9jb250YWluZXJzID0gMTI7CisgICAgICAgIFQgY29udGFpbmVyc1tudW1iZXJfb2ZfY29udGFpbmVyc107CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDU7ICsraSkgeworICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGk7ICsraikKKyAgICAgICAgICAgICAgICBjb250YWluZXJzW2ldLmluc2VydCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRhaW5lcnNbNl0uaW5zZXJ0KDEpOworICAgICAgICBjb250YWluZXJzWzddLmluc2VydCgxKTsKKyAgICAgICAgY29udGFpbmVyc1s3XS5pbnNlcnQoMSk7CisgICAgICAgIGNvbnRhaW5lcnNbOF0uaW5zZXJ0KC0xKTsKKyAgICAgICAgY29udGFpbmVyc1s5XS5pbnNlcnQoLTEpOworICAgICAgICBjb250YWluZXJzWzldLmluc2VydCgtMSk7CisgICAgICAgIGNvbnRhaW5lcnNbMTBdLmluc2VydCgtMSk7CisgICAgICAgIGNvbnRhaW5lcnNbMTBdLmluc2VydCgxKTsKKyAgICAgICAgY29udGFpbmVyc1sxMV0uaW5zZXJ0KDEpOworICAgICAgICBjb250YWluZXJzWzExXS5pbnNlcnQoMik7CisgICAgICAgIGNvbnRhaW5lcnNbMTFdLmluc2VydCgzKTsKKyAgICAgICAgY29udGFpbmVyc1sxMV0uaW5zZXJ0KDQpOworICAgICAgICBjb250YWluZXJzWzExXS5pbnNlcnQoNSk7CisKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiBoYXNoZXI7CisKKyAgICAgICAgZm9yKGludCBpMiA9IDA7IGkyIDwgbnVtYmVyX29mX2NvbnRhaW5lcnM7ICsraTIpIHsKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tpMl0pKTsKKworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09CisgICAgICAgICAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoY29udGFpbmVyc1tpMl0pKTsKKworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pCisgICAgICAgICAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzW2kyXS5iZWdpbigpLCBjb250YWluZXJzW2kyXS5lbmQoKSkpOworCisgICAgICAgICAgICBmb3IoaW50IGoyID0gaTIgKyAxOyBqMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2oyKSB7CisgICAgICAgICAgICAgICAgQk9PU1RfVEVTVCgKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZXJzW2kyXSA9PSBjb250YWluZXJzW2oyXSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09IGhhc2hlcihjb250YWluZXJzW2oyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBCT09TVF9QUF9DQVQoQ09OVEFJTkVSX1RZUEUsIF9oYXNoX2ludGVnZXJfdGVzdHMoKSkKKyAgICB7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGNoYXI+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGludD4qKSAwKTsKKyAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8dW5zaWduZWQgbG9uZz4qKSAwKTsKKyAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8ZG91YmxlPiopIDApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKworI3VuZGVmIENPTlRBSU5FUl9UWVBFCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfYXJyYXlfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX2FycmF5X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTI4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX2FycmF5X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisKKy8vIENvcHlyaWdodCAyMDEyIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfSERSX0FSUkFZKQorI2RlZmluZSBURVNUX0FSUkFZCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2VuZGlmCisKKyNpZmRlZiBURVNUX0FSUkFZCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBhcnJheV90ZXN0cyhUIGNvbnN0JiB2KSB7CisgICAgbmRuYm9vc3Q6Omhhc2g8dHlwZW5hbWUgVDo6dmFsdWVfdHlwZT4gaGY7CisgICAgZm9yKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSB2LmJlZ2luKCk7IGkgIT0gdi5lbmQoKTsgKytpKSB7CisgICAgICAgIGZvcih0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBqID0gdi5iZWdpbigpOyBqICE9IHYuZW5kKCk7ICsraikgeworICAgICAgICAgICAgaWYgKGkgIT0gaikKKyAgICAgICAgICAgICAgICBCT09TVF9URVNUKGhmKCppKSAhPSBoZigqaikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoaGYoKmkpID09IGhmKCpqKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZW1wdHlfYXJyYXlfdGVzdCgpIHsKKy8qCisgICAgbmRuYm9vc3Q6Omhhc2g8c3RkOjphcnJheTxpbnQsIDA+ID4gZW1wdHlfYXJyYXlfaGFzaDsKKyAgICBzdGQ6OmFycmF5PGludCwgMD4gZW1wdHlfYXJyYXk7CisgICAgQk9PU1RfVEVTVChlbXB0eV9hcnJheV9oYXNoKGVtcHR5X2FycmF5KSA9PSBuZG5ib29zdDo6aGFzaF92YWx1ZShlbXB0eV9hcnJheSkpOworKi8KK30KKwordm9pZCBpbnRfMV9hcnJheV90ZXN0KCkKK3sKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OmFycmF5PGludCwgMT4gPiBhcnJheXM7CisgICAgc3RkOjphcnJheTxpbnQsIDE+IHZhbDsKKyAgICB2YWxbMF0gPSAwOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICB2YWxbMF0gPSAxOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICB2YWxbMF0gPSAyOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICBhcnJheV90ZXN0cyhhcnJheXMpOworfQorCit2b2lkIHN0cmluZ18xX2FycmF5X3Rlc3QoKQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsIDE+ID4gYXJyYXlzOworICAgIHN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsIDE+IHZhbDsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gIm9uZSI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9ICJ0d28iOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICBhcnJheV90ZXN0cyhhcnJheXMpOworfQorCit2b2lkIHN0cmluZ18zX2FycmF5X3Rlc3QoKQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsMyA+ID4gYXJyYXlzOworICAgIHN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsIDM+IHZhbDsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gIm9uZSI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9ICIiOyB2YWxbMV0gPSAib25lIjsgdmFsWzJdID0gIiI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9ICIiOyB2YWxbMV0gPSAiIjsgdmFsWzJdID0gIm9uZSI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9ICJvbmUiOyB2YWxbMV0gPSAib25lIjsgdmFsWzJdID0gIm9uZSI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9ICJvbmUiOyB2YWxbMV0gPSAidHdvIjsgdmFsWzJdID0gInRocmVlIjsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgYXJyYXlfdGVzdHMoYXJyYXlzKTsKK30KKworI2VuZGlmIC8vIFRFU1RfQVJSQVkKKworaW50IG1haW4oKQoreworI2lmZGVmIFRFU1RfQVJSQVkKKyAgICBlbXB0eV9hcnJheV90ZXN0KCk7CisgICAgaW50XzFfYXJyYXlfdGVzdCgpOworICAgIHN0cmluZ18xX2FycmF5X3Rlc3QoKTsKKyAgICBzdHJpbmdfM19hcnJheV90ZXN0KCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF9zbWFydF9wdHJfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX3NtYXJ0X3B0cl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzljNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF9zbWFydF9wdHJfdGVzdC5jcHAKQEAgLTAsMCArMSw4MCBAQAorCisvLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1NNQVJUX1BUUikKKyNkZWZpbmUgVEVTVF9TTUFSVF9QVFJTCisjaW5jbHVkZSA8bWVtb3J5PgorI2VuZGlmCisKKyNpZmRlZiBURVNUX1NNQVJUX1BUUlMKKwordm9pZCBzaGFyZWRfcHRyX3Rlc3RzKCkKK3sKKyAgICBzdGQ6OnNoYXJlZF9wdHI8aW50PiB4OworICAgIGNvbXBpbGVfdGltZV90ZXN0cygmeCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6c2hhcmVkX3B0cjxpbnQ+ID4geDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnNoYXJlZF9wdHI8aW50PiA+IHgyOworCisgICAgc3RkOjpzaGFyZWRfcHRyPGludD4gcHRyMShuZXcgaW50KDEwKSk7CisgICAgc3RkOjpzaGFyZWRfcHRyPGludD4gcHRyMjsKKworICAgIEJPT1NUX1RFU1QoeDEoeCkgPT0geDIocHRyMikpOworICAgIEJPT1NUX1RFU1QoeDEoeCkgIT0geDIocHRyMSkpOworICAgIHB0cjIucmVzZXQobmV3IGludCgxMCkpOworICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgPT0geDIocHRyMSkpOworICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgIT0geDIocHRyMikpOworICAgIHB0cjIgPSBwdHIxOworICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgPT0geDIocHRyMikpOworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVCh4MSh4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpKTsKKyAgICBCT09TVF9URVNUKHgxKHB0cjEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUocHRyMikpOworI2VuZGlmCit9CisKK3ZvaWQgdW5pcXVlX3B0cl90ZXN0cygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPGludD4geDsKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoJngpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiA+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4gPiB4MjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHB0cjEobmV3IGludCgxMCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHB0cjI7CisKKyAgICBCT09TVF9URVNUKHgxKHgpID09IHgyKHB0cjIpKTsKKyAgICBCT09TVF9URVNUKHgxKHgpICE9IHgyKHB0cjEpKTsKKyAgICBwdHIyLnJlc2V0KG5ldyBpbnQoMTApKTsKKyAgICBCT09TVF9URVNUKHgxKHB0cjEpID09IHgyKHB0cjEpKTsKKyAgICBCT09TVF9URVNUKHgxKHB0cjEpICE9IHgyKHB0cjIpKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVCh4MSh4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpKTsKKyNlbmRpZgorfQorCisjZW5kaWYKKworaW50IG1haW4oKQoreworI2lmZGVmIFRFU1RfU01BUlRfUFRSUworICAgIHNoYXJlZF9wdHJfdGVzdHMoKTsKKyAgICB1bmlxdWVfcHRyX3Rlc3RzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF90dXBsZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfdHVwbGVfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1MzQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfdHVwbGVfdGVzdC5jcHAKQEAgLTAsMCArMSw3NyBAQAorCisvLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisjICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjICBlbHNlCisjICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9UVVBMRSkKKyNkZWZpbmUgVEVTVF9UVVBMRQorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNlbmRpZgorCisjaWZkZWYgVEVTVF9UVVBMRQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgdHVwbGVfdGVzdHMoVCBjb25zdCYgdikgeworICAgIG5kbmJvb3N0OjpoYXNoPHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+IGhmOworICAgIGZvcih0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBpID0gdi5iZWdpbigpOyBpICE9IHYuZW5kKCk7ICsraSkgeworICAgICAgICBmb3IodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaiA9IHYuYmVnaW4oKTsgaiAhPSB2LmVuZCgpOyArK2opIHsKKyAgICAgICAgICAgIGlmIChpICE9IGopCisgICAgICAgICAgICAgICAgQk9PU1RfVEVTVChoZigqaSkgIT0gaGYoKmopKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBCT09TVF9URVNUKGhmKCppKSA9PSBoZigqaikpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGVtcHR5X3R1cGxlX3Rlc3QoKSB7CisgICAgbmRuYm9vc3Q6Omhhc2g8c3RkOjp0dXBsZTw+ID4gZW1wdHlfdHVwbGVfaGFzaDsKKyAgICBzdGQ6OnR1cGxlPD4gZW1wdHlfdHVwbGU7CisgICAgQk9PU1RfVEVTVChlbXB0eV90dXBsZV9oYXNoKGVtcHR5X3R1cGxlKSA9PSBuZG5ib29zdDo6aGFzaF92YWx1ZShlbXB0eV90dXBsZSkpOworfQorCit2b2lkIGludF90dXBsZV90ZXN0KCkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dHVwbGU8aW50PiA+IGludF90dXBsZXM7CisgICAgaW50X3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDApKTsKKyAgICBpbnRfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMSkpOworICAgIGludF90dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgyKSk7CisgICAgdHVwbGVfdGVzdHMoaW50X3R1cGxlcyk7Cit9CisKK3ZvaWQgaW50X3N0cmluZ190dXBsZV90ZXN0KCkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dHVwbGU8aW50LCBzdGQ6OnN0cmluZz4gPiBpbnRfc3RyaW5nX3R1cGxlczsKKyAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDAsIHN0ZDo6c3RyaW5nKCJ6ZXJvIikpKTsKKyAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDEsIHN0ZDo6c3RyaW5nKCJvbmUiKSkpOworICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMiwgc3RkOjpzdHJpbmcoInR3byIpKSk7CisgICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgwLCBzdGQ6OnN0cmluZygib25lIikpKTsKKyAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDEsIHN0ZDo6c3RyaW5nKCJ6ZXJvIikpKTsKKyAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDAsIHN0ZDo6c3RyaW5nKCIiKSkpOworICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMSwgc3RkOjpzdHJpbmcoIiIpKSk7CisgICAgdHVwbGVfdGVzdHMoaW50X3N0cmluZ190dXBsZXMpOworfQorCisjZW5kaWYgLy8gVEVTVF9UVVBMRQorCitpbnQgbWFpbigpCit7CisjaWZkZWYgVEVTVF9UVVBMRQorICAgIGVtcHR5X3R1cGxlX3Rlc3QoKTsKKyAgICBpbnRfdHVwbGVfdGVzdCgpOworICAgIGludF9zdHJpbmdfdHVwbGVfdGVzdCgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdHJpbmdfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RyaW5nX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTc2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RyaW5nX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlICIuL2NvbXBpbGVfdGltZS5ocHAiCisKK3ZvaWQgc3RyaW5nX3Rlc3RzKCkKK3sKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKHN0ZDo6c3RyaW5nKikgMCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6c3RyaW5nPiB4MTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6c3RyaW5nPiB4MjsKKworICAgIEJPT1NUX1RFU1QoeDEoIkhlbGxvIikgPT0geDIoc3RkOjpzdHJpbmcoIkhlbCIpICsgImxvIikpOworICAgIEJPT1NUX1RFU1QoeDEoIiIpID09IHgyKHN0ZDo6c3RyaW5nKCkpKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgc3RkOjpzdHJpbmcgdmFsdWUxOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlMigiSGVsbG8iKTsKKworICAgIEJPT1NUX1RFU1QoeDEodmFsdWUxKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMSkpOworICAgIEJPT1NUX1RFU1QoeDEodmFsdWUyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMikpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2YWx1ZTEpID09CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlMS5iZWdpbigpLCB2YWx1ZTEuZW5kKCkpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUyKSA9PQorICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZTIuYmVnaW4oKSwgdmFsdWUyLmVuZCgpKSk7CisjZW5kaWYKK30KKworI2lmICFkZWZpbmVkKEJPT1NUX05PX1NURF9XU1RSSU5HKQordm9pZCB3c3RyaW5nX3Rlc3RzKCkKK3sKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKHN0ZDo6d3N0cmluZyopIDApOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OndzdHJpbmc+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjp3c3RyaW5nPiB4MjsKKworICAgIEJPT1NUX1RFU1QoeDEoTCJIZWxsbyIpID09IHgyKHN0ZDo6d3N0cmluZyhMIkhlbCIpICsgTCJsbyIpKTsKKyAgICBCT09TVF9URVNUKHgxKEwiIikgPT0geDIoc3RkOjp3c3RyaW5nKCkpKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgc3RkOjp3c3RyaW5nIHZhbHVlMTsKKyAgICBzdGQ6OndzdHJpbmcgdmFsdWUyKEwiSGVsbG8iKTsKKworICAgIEJPT1NUX1RFU1QoeDEodmFsdWUxKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMSkpOworICAgIEJPT1NUX1RFU1QoeDEodmFsdWUyKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMikpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2YWx1ZTEpID09CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlMS5iZWdpbigpLCB2YWx1ZTEuZW5kKCkpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUyKSA9PQorICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZTIuYmVnaW4oKSwgdmFsdWUyLmVuZCgpKSk7CisjZW5kaWYKK30KKyNlbmRpZgorCitpbnQgbWFpbigpCit7CisgICAgc3RyaW5nX3Rlc3RzKCk7CisjaWYgIWRlZmluZWQoQk9PU1RfTk9fU1REX1dTVFJJTkcpCisgICAgd3N0cmluZ190ZXN0cygpOworI2VuZGlmCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdHlwZV9pbmRleF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF90eXBlX2luZGV4X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZjgxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdHlwZV9pbmRleF90ZXN0LmNwcApAQCAtMCwwICsxLDUzIEBACisKKy8vIENvcHlyaWdodCAyMDExIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfVFlQRUlOREVYKQorCisjaW5jbHVkZSA8dHlwZWluZGV4PgorCit2b2lkIHRlc3RfdHlwZV9pbmRleCgpIHsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6dHlwZV9pbmRleD4gaGFzaGVyOworCisjaWYgZGVmaW5lZChCT09TVF9OT19UWVBFSUQpCisgICAgc3RkOjpjb3V0PDwiVW5hYmxlIHRvIHRlc3Qgc3RkOjp0eXBlX2luZGV4LCBhcyB0eXBlaWQgaXNuJ3QgYXZhaWxhYmxlIgorICAgICAgICA8PHN0ZDo6ZW5kbDsKKyNlbHNlCisgICAgc3RkOjp0eXBlX2luZGV4IGludF9pbmRleCA9IHR5cGVpZChpbnQpOworICAgIHN0ZDo6dHlwZV9pbmRleCBpbnQyX2luZGV4ID0gdHlwZWlkKGludCk7CisgICAgc3RkOjp0eXBlX2luZGV4IGNoYXJfaW5kZXggPSB0eXBlaWQoY2hhcik7CisgICAgCisgICAgQk9PU1RfVEVTVChoYXNoZXIoaW50X2luZGV4KSA9PSBpbnRfaW5kZXguaGFzaF9jb2RlKCkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyKGludF9pbmRleCkgPT0gaW50Ml9pbmRleC5oYXNoX2NvZGUoKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIoY2hhcl9pbmRleCkgPT0gY2hhcl9pbmRleC5oYXNoX2NvZGUoKSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGludF9pbmRleCkgPT0gaW50X2luZGV4Lmhhc2hfY29kZSgpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoaW50X2luZGV4KSA9PSBpbnQyX2luZGV4Lmhhc2hfY29kZSgpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoY2hhcl9pbmRleCkgPT0gY2hhcl9pbmRleC5oYXNoX2NvZGUoKSk7CisKKyAgICBCT09TVF9URVNUKGhhc2hlcihpbnRfaW5kZXgpID09IGhhc2hlcihpbnQyX2luZGV4KSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIoaW50X2luZGV4KSAhPSBoYXNoZXIoY2hhcl9pbmRleCkpOworI2VuZGlmCit9CisjZW5kaWYKKworaW50IG1haW4oKQoreworI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9UWVBFSU5ERVgpCisgICAgdGVzdF90eXBlX2luZGV4KCk7CisjZWxzZQorICAgIHN0ZDo6Y291dDw8Ijx0eXBlX2luZGV4PiBub3QgYXZhaWxhYmxlLiI8PHN0ZDo6ZW5kbDsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdmFsdWVfYXJyYXlfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdmFsdWVfYXJyYXlfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3OWFjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92YWx1ZV9hcnJheV90ZXN0LmNwcApAQCAtMCwwICsxLDY0IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIE9uIHNvbWUgY29tcGlsZXJzIGhhc2hfdmFsdWUgaXNuJ3QgYXZhaWxhYmxlIGZvciBhcnJheXMsIHNvIEkgdGVzdCBpdAorLy8gc2VwYXJhdGVseSBmcm9tIHRoZSBtYWluIGFycmF5IHRlc3RzLgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK3ZvaWQgYXJyYXlfaW50X3Rlc3QoKQoreworICAgIGNvbnN0IGludCBhcnJheTFbMjVdID0geworICAgICAgICAyNiwgLTQzLCAzMiwgNjUsIDQ1LAorICAgICAgICAxMiwgNjcsIDMyLCAxMiwgMjMsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDgsIC0xMiwgMjMsIDY1LCA0NSwKKyAgICAgICAgLTEsIDkzLCAtNTQsIDk4NywgMworICAgIH07CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMjVdPiBoYXNoZXIxOworCisgICAgaW50IGFycmF5MlsxXSA9IHszfTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsxXT4gaGFzaGVyMjsKKworICAgIGludCBhcnJheTNbMl0gPSB7MiwgM307CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbMl0+IGhhc2hlcjM7CisKKyAgICBCT09TVF9URVNUKGhhc2hlcjEoYXJyYXkxKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGFycmF5MSkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyMihhcnJheTIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoYXJyYXkyKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIzKGFycmF5MykgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShhcnJheTMpKTsKK30KKwordm9pZCB0d29fZGltZW5zaW9uYWxfYXJyYXlfdGVzdCgpCit7CisgICAgaW50IGFycmF5WzNdWzJdID0ge3stNSwgNn0sIHs3LCAtM30sIHsyNiwgMX19OworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50WzNdWzJdPiBoYXNoZXI7CisKKyAgICBCT09TVF9URVNUKGhhc2hlcihhcnJheSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShhcnJheSkpOworfQorCisjZW5kaWYKKworaW50IG1haW4oKQoreworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisgICAgYXJyYXlfaW50X3Rlc3QoKTsKKyAgICB0d29fZGltZW5zaW9uYWxfYXJyYXlfdGVzdCgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3ZlY3Rvcl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92ZWN0b3JfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhYjdmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92ZWN0b3JfdGVzdC5jcHAKQEAgLTAsMCArMSwzNSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK3VzaW5nIHN0ZDo6dmVjdG9yOworI2RlZmluZSBDT05UQUlORVJfVFlQRSB2ZWN0b3IKKyNpbmNsdWRlICIuL2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAiCisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICB2ZWN0b3JfdGVzdHM6OnZlY3Rvcl9oYXNoX2ludGVnZXJfdGVzdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2ltcGxpY2l0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9pbXBsaWNpdF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTdkOGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9pbXBsaWNpdF90ZXN0LmNwcApAQCAtMCwwICsxLDIxIEBACisKKy8vIENvcHlyaWdodCAyMDEwIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKworbmFtZXNwYWNlIHRlc3QKK3sKKyAgICBzdHJ1Y3QgYmFzZSB7fTsKKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGJhc2UgY29uc3QmKSB7IHJldHVybiAwOyB9CisgICAgCisgICAgc3RydWN0IGNvbnZlcnRzIHsgb3BlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGJhc2UoKTsgfSB9OworfQorCitpbnQgbWFpbigpIHsKKyAgICBuZG5ib29zdDo6aGFzaDx0ZXN0Ojpjb252ZXJ0cz4gaGFzaDsKKyAgICB0ZXN0Ojpjb252ZXJ0cyB4OworICAgIAorICAgIGhhc2goeCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfZXh0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX2V4dF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTVhZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX2V4dF90ZXN0LmNwcApAQCAtMCwwICsxLDMzIEBACisKKy8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNkZWZpbmUgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRSBuZG5ib29zdAorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworaW50IGYoc3RkOjpzaXplX3QgaGFzaDEsIGludCogeDEpIHsKKworICAgIC8vIENoZWNrIHRoYXQgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnQqPiB3b3JrcyBpbiBib3RoIGZpbGVzLgorICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4gcHRyX2hhc2hlcjsKKyAgICBCT09TVF9URVNUKGhhc2gxID09IHB0cl9oYXNoZXIoeDEpKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisKKyAgICAvLyBDaGVjayB0aGF0IHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiBpcyBhdmFpYWJsZSBpbiB0aGlzIGZpbGUuCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IHg7CisgICAgeC5wdXNoX2JhY2soKngxKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiA+IHZlY3Rvcl9oYXNoZXI7CisgICAgcmV0dXJuIHZlY3Rvcl9oYXNoZXIoeCkgIT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh4KTsKKyAgICAKKyNlbHNlCisKKyAgICByZXR1cm4gMDsKKworI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbGlua19ub19leHRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfbm9fZXh0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWU2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfbm9fZXh0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjAgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2RlZmluZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFIG5kbmJvb3N0CisjZGVmaW5lIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCitleHRlcm4gaW50IGYoc3RkOjpzaXplX3QsIGludCopOworCitpbnQgbWFpbigpIHsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludCo+IHB0cl9oYXNoZXI7CisgICAgaW50IHggPSA1NTsKKyAgICBCT09TVF9URVNUKCFmKHB0cl9oYXNoZXIoJngpLCAmeCkpOworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWUyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdC5jcHAKQEAgLTAsMCArMSwxMSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKworZXh0ZXJuIGludCBmKCk7CitpbnQgbWFpbigpIHsgcmV0dXJuIGYoKTsgfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX3Rlc3RfMi5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdF8yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVmZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX3Rlc3RfMi5jcHAKQEAgLTAsMCArMSwxMCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKworaW50IGYoKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L25hbWVzcGFjZV9mYWlsX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9uYW1lc3BhY2VfZmFpbF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI5ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9uYW1lc3BhY2VfZmFpbF90ZXN0LmNwcApAQCAtMCwwICsxLDE2IEBACisKKy8vIENvcHlyaWdodCAyMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBDaGVjayB0aGF0IEkgaGF2ZW4ndCBpbmFkdmVydGFudGx5IHB1bGxlZCBuYW1lc3BhY2Ugc3RkIGludG8gdGhlIGdsb2JhbAorLy8gbmFtZXNwYWNlLgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorCit0eXBlZGVmIGxpc3Q8aW50PiBmb287CisKK2ludCBtYWluKCkge30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkOGJhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMjYzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CisgIDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA2LjAiPgorICA8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5FZGl0b3IuRG9jdW1lbnQiPgorCisgIDx0aXRsZT5Cb29zdCBGdW5jdGlvbiBPYmplY3QgQWRhcHRlciBMaWJyYXJ5PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+CisgIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiMwMDdGN0YiIGNlbGxwYWRkaW5nPSIyIiBzdW1tYXJ5PSIiPgorICAgIDx0cj4KKyAgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9CisgICAgICAiYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+SG9tZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uL2xpYnJhcmllcy5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkxpYnJhcmllczwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9wZW9wbGUuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5QZW9wbGU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9tb3JlL2ZhcS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkZBUTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL21vcmUvaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Nb3JlPC9iaWc+PC9mb250PjwvYT48L3RkPgorICAgIDwvdHI+CisgIDwvdGFibGU+CisKKyAgPGgxPkltcHJvdmVkIEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyczwvaDE+CisKKyAgPHA+VGhlIGhlYWRlciA8YSBocmVmPSIuLi8uLi9ib29zdC9mdW5jdGlvbmFsLmhwcCI+ZnVuY3Rpb25hbC5ocHA8L2E+CisgIHByb3ZpZGVzIGVuaGFuY2VtZW50cyB0byB0aGUgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzIHNwZWNpZmllZCBpbiB0aGUgQysrCisgIFN0YW5kYXJkIExpYnJhcnkgKHNlY3Rpb25zIDIwLjMuNSwgdGhyb3VnaCB0byAyMC4zLjgpLiBUaGUgZW5oYW5jZW1lbnRzIGFyZQorICBwcmluY2lwYWxseSBwb3NzaWJsZSBkdWUgdG8gdHdvIGNoYW5nZXM6PC9wPgorCisgIDxvbD4KKyAgICA8bGk+V2UgdXNlIHRoZSBCb29zdCA8dHQ+PGEgaHJlZj0KKyAgICAiLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGxfdHJhaXRzPC9hPjwvdHQ+IHRlbXBsYXRlcyB0byBhdm9pZCB0aGUKKyAgICBwcm9ibGVtIG9mIDxhIGhyZWY9ImJpbmRlcnMuaHRtbCNyZWZyZWYiPnJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlczwvYT4sCisgICAgYW5kIHRvIGltcHJvdmUgdGhlIGVmZmljaWVuY3kgb2YgPGEgaHJlZj0ibWVtX2Z1bi5odG1sI2FyZ3MiPnBhcmFtZXRlcgorICAgIHBhc3Npbmc8L2E+LjwvbGk+CisKKyAgICA8bGk+V2UgdXNlIHR3byA8YSBocmVmPSJmdW5jdGlvbl90cmFpdHMuaHRtbCI+ZnVuY3Rpb24gb2JqZWN0IHRyYWl0czwvYT4KKyAgICBjbGFzcyB0ZW1wbGF0ZXMgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIDx0dD48YSBocmVmPQorICAgICJwdHJfZnVuLmh0bWwiPnB0cl9mdW48L2E+PC90dD4gd2l0aCB0aGUgYWRhcHRlcnMgaW4gdGhpcyBsaWJyYXJ5LjwvbGk+CisgIDwvb2w+CisKKyAgPGgzPkNvbnRlbnRzPC9oMz4KKworICA8cD5UaGUgaGVhZGVyIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYW5kIGNsYXNzIHRlbXBsYXRlczo8L3A+CisKKyAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjUiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRoIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJmdW5jdGlvbl90cmFpdHMuaHRtbCI+RnVuY3Rpb24gb2JqZWN0CisgICAgICB0cmFpdHM8L2E+PC90aD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+dW5hcnlfdHJhaXRzPGJyPgorICAgICAgYmluYXJ5X3RyYWl0czwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5Vc2VkIHRvIGRldGVybWluZSB0aGUgdHlwZXMgb2YgZnVuY3Rpb24gb2JqZWN0cycgYW5kCisgICAgICBmdW5jdGlvbnMnIGFyZ3VtZW50cy4gRWxpbWluYXRlIHRoZSBuZWNlc3NpdHkgZm9yCisgICAgICA8dHQ+cHRyX2Z1bjwvdHQ+LjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0aCBhbGlnbj0ibGVmdCI+PGEgaHJlZj0ibmVnYXRvcnMuaHRtbCI+TmVnYXRvcnM8L2E+PC90aD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+dW5hcnlfbmVnYXRlPGJyPgorICAgICAgYmluYXJ5X25lZ2F0ZTxicj4KKyAgICAgIG5vdDE8YnI+CisgICAgICBub3QyPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPkJhc2VkIG9uIHNlY3Rpb24gMjAuMy41IG9mIHRoZSBzdGFuZGFyZC48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGggYWxpZ249ImxlZnQiPjxhIGhyZWY9ImJpbmRlcnMuaHRtbCI+QmluZGVyczwvYT48L3RoPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5iaW5kZXIxc3Q8YnI+CisgICAgICBiaW5kZXIybmQ8YnI+CisgICAgICBiaW5kMXN0PGJyPgorICAgICAgYmluZDJuZDwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5CYXNlZCBvbiBzZWN0aW9uIDIwLjMuNiBvZiB0aGUgc3RhbmRhcmQuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRoIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJwdHJfZnVuLmh0bWwiPkFkYXB0ZXJzIGZvciBwb2ludGVycyB0bworICAgICAgZnVuY3Rpb25zPC9hPjwvdGg+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248YnI+CisgICAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxicj4KKyAgICAgIHB0cl9mdW48L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+QmFzZWQgb24gc2VjdGlvbiAyMC4zLjcgb2YgdGhlIHN0YW5kYXJkLiBOb3QgcmVxdWlyZWQKKyAgICAgIGZvciB1c2Ugd2l0aCB0aGlzIGxpYnJhcnkgc2luY2UgdGhlIGJpbmRlcnMgYW5kIG5lZ2F0b3JzIGNhbiBhZGFwdAorICAgICAgZnVuY3Rpb25zLCBidXQgbWF5IGJlIG5lZWRlZCB3aXRoIHRoaXJkIHBhcnR5IGFkYXB0ZXJzLjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0aCBhbGlnbj0ibGVmdCI+PGEgaHJlZj0ibWVtX2Z1bi5odG1sIj5BZGFwdGVycyBmb3IgcG9pbnRlcnMgdG8gbWVtYmVyCisgICAgICBmdW5jdGlvbnM8L2E+PC90aD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+bWVtX2Z1bl90PGJyPgorICAgICAgbWVtX2Z1bjFfdDxicj4KKyAgICAgIGNvbnN0X21lbV9mdW5fdDxicj4KKyAgICAgIGNvbnN0X21lbV9mdW4xX3Q8YnI+CisgICAgICBtZW1fZnVuX3JlZl90PGJyPgorICAgICAgbWVtX2Z1bjFfcmVmX3Q8YnI+CisgICAgICBjb25zdF9tZW1fZnVuX3JlZl90PGJyPgorICAgICAgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8YnI+CisgICAgICBtZW1fZnVuPGJyPgorICAgICAgbWVtX2Z1bl9yZWY8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+QmFzZWQgb24gc2VjdGlvbiAyMC4zLjggb2YgdGhlIHN0YW5kYXJkLjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDM+VXNhZ2U8L2gzPgorCisgIDxwPlVzaW5nIHRoZXNlIGFkYXB0ZXJzIHNob3VsZCBiZSBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyB1c2luZyB0aGUKKyAgc3RhbmRhcmQgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzOyB0aGUgb25seSBkaWZmZXJlbmNlcyBhcmUgdGhhdCB5b3UgbmVlZAorICB0byB3cml0ZSA8dHQ+Ym9vc3Q6OjwvdHQ+IGluc3RlYWQgb2YgPHR0PnN0ZDo6PC90dD4sIGFuZCB0aGF0IHlvdSB3aWxsIGdldAorICBmZXdlciBoZWFkYWNoZXMuPC9wPgorCisgIDxwPkZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgYSA8dHQ+UGVyc29uPC90dD4gY2xhc3MgdGhhdCBjb250YWluZWQgYQorICA8dHQ+c2V0X25hbWU8L3R0PiBmdW5jdGlvbjo8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2NsYXNzIFBlcnNvbgoreworICBwdWJsaWM6CisgICAgdm9pZCBzZXRfbmFtZShjb25zdCBzdGQ6OnN0cmluZyAmYW1wO25hbWUpOworICAvLyAuLi4KK307Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPllvdSBjb3VsZCByZW5hbWUgYSBidW5jaCBvZiBwZW9wbGUgaW4gYSBjb2xsZWN0aW9uLCA8dHQ+YzwvdHQ+LCBieQorICB3cml0aW5nPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+CitzdGQ6OmZvcl9lYWNoKGMuYmVnaW4oKSwgYy5lbmQoKSwgCisgICAgICAgICAgICAgIGJvb3N0OjpiaW5kMm5kKGJvb3N0OjptZW1fZnVuX3JlZigmYW1wO1BlcnNvbjo6c2V0X25hbWUpLCAiRnJlZCIpKTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+SWYgdGhlIHN0YW5kYXJkIGFkYXB0ZXJzIGhhZCBiZWVuIHVzZWQgaW5zdGVhZCB0aGVuIHRoaXMgY29kZSB3b3VsZAorICBub3JtYWxseSBmYWlsIHRvIGNvbXBpbGUsIGJlY2F1c2UgPHR0PnNldF9uYW1lPC90dD4gdGFrZXMgYSByZWZlcmVuY2UKKyAgYXJndW1lbnQuIFJlZmVyIHRvIHRoZSBjb21tZW50cyBpbiB0aGUgPGEgaHJlZj0iYmluZGVycy5odG1sI3JlZnJlZiI+YmluZGVyCisgIGRvY3VtZW50YXRpb248L2E+IHRvIGV4cGxhaW4gd2h5IHRoaXMgaXMgc28uPC9wPgorCisgIDxoMz5Db21waWxlciBDb21wYXRpYmlsaXR5PC9oMz4KKworICA8cD5UaGUgaGVhZGVyIGFuZCA8YSBocmVmPSJ0ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwIj50ZXN0IHByb2dyYW08L2E+IGhhdmUgYmVlbgorICBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcGlsZXJzOjwvcD4KKworICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSIgc3VtbWFyeT0iIj4KKyAgICA8dHI+CisgICAgICA8dGg+Q29tcGlsZXI8L3RoPgorCisgICAgICA8dGg+Q29tbWVudHM8L3RoPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPkJvcmxhbmQgQysrQnVpbGRlciA0IFVwZGF0ZSAyPC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5ObyBrbm93biBpc3N1ZXMuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRkIHZhbGlnbj0idG9wIj5Cb3JsYW5kIEMrKyA1LjU8L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPk5vIGtub3duIGlzc3Vlcy48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPmcrKyAyLjk1LjI8L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPk5vIGtub3duIGlzc3Vlcy48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPk1pY3Jvc29mdCBWaXN1YWwgQysrIFNlcnZpY2UgUGFjayAzPC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj4KKyAgICAgICAgQ29tcGlsZXIgbGFja3MgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwgc28gdGhpcyBsaWJyYXJ5IG9mZmVycyBsaXR0bGUKKyAgICAgICAgbW9yZSB0aGFuIGlzIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZCBhZGFwdGVyczoKKworICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPlRoZSA8dHQ+Y2FsbF90cmFpdHM8L3R0PiBtZWNoYW5pc20gaXMgdW5hYmxlIHRvIHByZXZlbnQKKyAgICAgICAgICByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMsIGFuZCBzbyB0aGUgYWRhcHRlcnMgaW4gdGhpcyBsaWJyYXJ5IHdpbGwKKyAgICAgICAgICBiZSB1c2FibGUgaW4gZmV3ZXIgc2l0dWF0aW9ucy48L2xpPgorCisgICAgICAgICAgPGxpPlRoZSA8dHQ+ZnVuY3Rpb25fdHJhaXRzPC90dD4gbWVjaGFuaXNtIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUKKyAgICAgICAgICB0aGUgYXJndW1lbnQgYW5kIHJlc3VsdCB0eXBlcyBvZiBmdW5jdGlvbnMsIHRoZXJlZm9yZQorICAgICAgICAgIDx0dD5wdHJfZnVuPC90dD4gY29udGludWVzIHRvIGJlIHJlcXVpcmVkIHRvIGFkYXB0IGZ1bmN0aW9ucy48L2xpPgorICAgICAgICA8L3VsPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMz5GdXR1cmUgRGlyZWN0aW9uczwvaDM+CisKKyAgPHA+VGhpcyBsaWJyYXJ5J3MgcHJpbWFyeSBmb2N1cyBpcyB0byBzb2x2ZSB0aGUgcHJvYmxlbSBvZiByZWZlcmVuY2VzIHRvCisgIHJlZmVyZW5jZXMgd2hpbGUgbWFpbnRhaW5pbmcgYXMgbXVjaCBjb21wYXRpYmlsaXR5IGFzIHBvc3NpYmxlIHdpdGggdGhlCisgIHN0YW5kYXJkIGxpYnJhcnkuIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHRlY2huaXF1ZXMgeW91IHJlYWQgYWJvdXQgaW4KKyAgYm9va3MgYW5kIG1hZ2F6aW5lcyB3aXRoIG1hbnkgb2YgdG9kYXkncyBjb21waWxlcnMuPC9wPgorCisgIDxwPkluIHRoZSBsb25nZXIgdGVybSwgZXZlbiBiZXR0ZXIgc29sdXRpb25zIGFyZSBsaWtlbHk6PC9wPgorCisgIDxvbD4KKyAgICA8bGk+U2V2ZXJhbCBCb29zdCBtZW1iZXJzIGFyZSB3b3JraW5nIG9uIGV4cHJlc3Npb24gdGVtcGxhdGUgbGlicmFyaWVzLgorICAgIFRoZXNlIHdpbGwgYWxsb3cgYSBtb3JlIG5hdHVyYWwgc3ludGF4IGZvciBjb21iaW5pbmcgYW5kIGFkYXB0aW5nCisgICAgZnVuY3Rpb25zLiBBcyB0aGlzIGlzIGEgbmV3IHRlY2hub2xvZ3ksIGl0IG1heSBiZSBzb21lIHRpbWUgYmVmb3JlIGl0IGhhcworICAgIG1hdHVyZWQgYW5kIGlzIHdpZGVseSBzdXBwb3J0ZWQgYnkgbWFqb3IgY29tcGlsZXJzIGJ1dCBzaG93cyBncmVhdAorICAgIHByb21pc2UuIEluIHRoZSBtZWFudGltZSwgdGhlIGZ1bmN0aW9uYWwuaHBwIGxpYnJhcnkgZmlsbHMgdGhlIGdhcC48L2xpPgorCisgICAgPGxpPlRoZSBTdGFuZGFyZCBDb21taXR0ZWUgaGFzIHJlY29nbmlzZWQgdGhlIHByb2JsZW0gb2YgcmVmZXJlbmNlcyB0bworICAgIHJlZmVyZW5jZXMgb2NjdXJyaW5nIGR1cmluZyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGFuZCBoYXMgbW92ZWQgdG8gZml4CisgICAgdGhlIHN0YW5kYXJkIChzZWUgdGhlIDxhIGhyZWY9CisgICAgImh0dHA6Ly9hbnViaXMuZGt1dWcuZGsvanRjMS9zYzIyL3dnMjEvZG9jcy9jd2dfYWN0aXZlLmh0bWwjMTA2Ij5DKysKKyAgICBzdGFuZGFyZCBjb3JlIGxhbmd1YWdlIGFjdGl2ZSBpc3N1ZXMgbGlzdDwvYT4pLjwvbGk+CisgIDwvb2w+CisKKyAgPGgzPkF1dGhvcjwvaDM+CisKKyAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL21hcmtfcm9kZ2Vycy5odG0iPk1hcmsgUm9kZ2VyczwvYT48L3A+CisKKyAgPGgzPkFja25vd2xlZGdlbWVudHM8L2gzPgorCisgIDxwPlRoYW5rcyB0byA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvam9obl9tYWRkb2NrLmh0bSI+Sm9obiBNYWRkb2NrPC9hPiBmb3IKKyAgc3VnZ2VzdGluZyB0aGUgbWVjaGFuaXNtIHRoYXQgYWxsb3dlZCB0aGUgZnVuY3Rpb24gb2JqZWN0cyB0cmFpdHMgdG8gd29yaworICBjb3JyZWN0bHkuIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9qZW5zX21hdXJlci5odG0iPkplbnMgTWF1cmVyPC9hPiBwcm92aWRlZAorICBpbnZhbHVhYmxlIGZlZWRiYWNrIGR1cmluZyB0aGUgPGEgaHJlZj0KKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZm9ybWFsX3Jldmlld19wcm9jZXNzLmh0bSI+Zm9ybWFsIHJldmlldyBwcm9jZXNzPC9hPi48L3A+CisgIDxocj4KKworICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KKyAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKKyAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgorCisgIDxwPlJldmlzZWQgCisgIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKKyAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+CisKKyAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+CisKKyAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgorICBjb3B5IGF0IDxhIGhyZWY9CisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9tZW1fZnVuLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvbWVtX2Z1bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGMxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvbWVtX2Z1bi5odG1sCkBAIC0wLDAgKzEsMjAxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CisKKyAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KKyAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+TWVtYmVyIEZ1bmN0aW9uIEFkYXB0ZXJzPC9oMT4KKworICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KKyAgaW5jbHVkZXMgaW1wcm92ZWQgdmVyc2lvbnMgb2YgdGhlIGZ1bGwgcmFuZ2Ugb2YgbWVtYmVyIGZ1bmN0aW9uIGFkYXB0ZXJzCisgIGZyb20gdGhlIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeSAoJnNlY3Q7MjAuMy44KTo8L3A+CisKKyAgPHVsPgorICAgIDxsaT48dHQ+bWVtX2Z1bl90PC90dD48L2xpPgorCisgICAgPGxpPjx0dD5tZW1fZnVuMV90PC90dD48L2xpPgorCisgICAgPGxpPjx0dD5jb25zdF9tZW1fZnVuX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PmNvbnN0X21lbV9mdW4xX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0Pm1lbV9mdW5fcmVmX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0Pm1lbV9mdW4xX3JlZl90PC90dD48L2xpPgorCisgICAgPGxpPjx0dD5jb25zdF9tZW1fZnVuX3JlZl90PC90dD48L2xpPgorCisgICAgPGxpPjx0dD5jb25zdF9tZW1fZnVuMV9yZWZfdDwvdHQ+PC9saT4KKyAgPC91bD4KKworICA8cD5hcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIG92ZXJsb2FkZWQgaGVscGVyIGZ1bmN0aW9uczwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD5tZW1fZnVuPC90dD48L2xpPgorCisgICAgPGxpPjx0dD5tZW1fZnVuX3JlZjwvdHQ+PC9saT4KKyAgPC91bD4KKworICA8cD5UaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIGFkYXB0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUKKyAgU3RhbmRhcmQ6PC9wPgorCisgIDx1bD4KKyAgICA8bGk+VGhlIDx0dD5maXJzdF9hcmd1bWVudF90eXBlPC90dD4gdHlwZWRlZiBoYXMgYmVlbiBjb3JyZWN0ZWQgZm9yIHRoZQorICAgIDx0dD5jb25zdF88L3R0PiBmYW1pbHkgb2YgbWVtYmVyIGZ1bmN0aW9uIGFkYXB0ZXJzIChzZWUgPGEgaHJlZj0KKyAgICAiI2ZpcnN0YXJnIj5iZWxvdzwvYT4pLjwvbGk+CisKKyAgICA8bGk+VGhlIGFyZ3VtZW50IHBhc3NlZCB0byA8dHQ+bWVtX2Z1bjFfdDwvdHQ+IGFuZCBpdHMgdmFyaWFudHMgaXMgcGFzc2VkCisgICAgdXNpbmcgdGhlIDx0dD5jYWxsX3RyYWl0czo6cGFyYW1fdHlwZTwvdHQ+IGZvciB0aGUgbWVtYmVyIGZ1bmN0aW9uJ3MKKyAgICBhcmd1bWVudCB0eXBlLjwvbGk+CisgIDwvdWw+CisKKyAgPGgzIGlkPSJmaXJzdGFyZyI+Zmlyc3RfYXJndW1lbnRfdHlwZTwvaDM+CisKKyAgPHA+VGhlIHN0YW5kYXJkIHNwZWNpZmllcyA8dHQ+Y29uc3RfbWVtX2Z1bjFfdDwvdHQ+LCBmb3IgZXhhbXBsZSwgbGlrZQorICB0aGlzOjwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordGVtcGxhdGUgJmx0O2NsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEEmZ3Q7IGNsYXNzIGNvbnN0X21lbV9mdW4xX3QKKyAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uJmx0OzxzdHJvbmc+VCo8L3N0cm9uZz4sIEEsIFMmZ3Q7IHsKK3B1YmxpYzoKKyAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChTIChUOjoqcCkoQSkgY29uc3QpOworICBTIG9wZXJhdG9yKCkoPHN0cm9uZz5jb25zdCBUKjwvc3Ryb25nPiBwLCBBIHgpIGNvbnN0OworfTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+Tm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCB0byA8dHQ+YmluYXJ5X2Z1bmN0aW9uPC90dD4gaXMgPHR0PlQqPC90dD4KKyAgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCB0byA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGlzIGFjdHVhbGx5CisgIG9mIHR5cGUgPHR0PjxlbT5jb25zdDwvZW0+Jm5ic3A7VCo8L3R0Pi48L3A+CisKKyAgPHA+RG9lcyB0aGlzIG1hdHRlcj8gV2VsbCwgY29uc2lkZXIgd2hhdCBoYXBwZW5zIHdoZW4gd2Ugd3JpdGU8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3N0cnVjdCBGb28geyB2b2lkIGJhcihpbnQpIGNvbnN0OyB9OworY29uc3QgRm9vICpjcCA9IG5ldyBGb287CitzdGQ6OmJpbmQxc3Qoc3RkOjptZW1fZnVuKCZhbXA7Rm9vOjpiYXIpLCBjcCk7Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPldlIGhhdmUgY3JlYXRlZCBhIDx0dD5jb25zdF9tZW1fZnVuMV90PC90dD4gb2JqZWN0IHdoaWNoIHdpbGwKKyAgZWZmZWN0aXZlbHkgY29udGFpbiB0aGUgZm9sbG93aW5nPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0eXBlZGVmIEZvbyogZmlyc3RfYXJndW1lbnRfdHlwZTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+VGhlIDx0dD5iaW5kMXN0PC90dD4gd2lsbCB0aGVuIGNyZWF0ZSBhIDx0dD5iaW5kZXIxc3Q8L3R0PiBvYmplY3QgdGhhdAorICB3aWxsIHVzZSB0aGlzIDx0dD50eXBlZGVmPC90dD4gYXMgdGhlIHR5cGUgb2YgYSBtZW1iZXIgd2hpY2ggd2lsbCBiZQorICBpbml0aWFsaXNlZCB3aXRoIDx0dD5jcDwvdHQ+LiBJbiBvdGhlciB3b3Jkcywgd2Ugd2lsbCBuZWVkIHRvIGluaXRpYWxpc2UgYQorICA8dHQ+Rm9vKjwvdHQ+IG1lbWJlciB3aXRoIGEgPHR0PmNvbnN0Jm5ic3A7Rm9vKjwvdHQ+IHBvaW50ZXIhIENsZWFybHkgdGhpcworICBpcyBub3QgcG9zc2libGUsIHNvIHRvIGltcGxlbWVudCB0aGlzIHlvdXIgU3RhbmRhcmQgTGlicmFyeSB2ZW5kb3Igd2lsbAorICBoYXZlIGhhZCB0byBjYXN0IGF3YXkgdGhlIGNvbnN0bmVzcyBvZiA8dHQ+Y3A8L3R0PiwgcHJvYmFibHkgd2l0aGluIHRoZQorICBib2R5IG9mIDx0dD5iaW5kMXN0PC90dD4uPC9wPgorCisgIDxwPlRoaXMgaGFjayB3aWxsIG5vdCBzdWZmaWNlIHdpdGggdGhlIGltcHJvdmVkIDxhIGhyZWY9CisgICJiaW5kZXJzLmh0bWwiPmJpbmRlcnM8L2E+IGluIHRoaXMgbGlicmFyeSwgc28gd2UgaGF2ZSBoYWQgdG8gcHJvdmlkZQorICBjb3JyZWN0ZWQgdmVyc2lvbnMgb2YgdGhlIG1lbWJlciBmdW5jdGlvbiBhZGFwdGVycyBhcyB3ZWxsLjwvcD4KKworICA8aDMgaWQ9ImFyZ3MiPkFyZ3VtZW50IFR5cGVzPC9oMz4KKworICA8cD5UaGUgc3RhbmRhcmQgZGVmaW5lcyA8dHQ+bWVtX2Z1bjFfdDwvdHQ+LCBmb3IgZXhhbXBsZSwgbGlrZSB0aGlzCisgICgmc2VjdDsyMC4zLjgmbmJzcDsmcGFyYTsyKTo8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3RlbXBsYXRlICZsdDtjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBBJmd0OyBjbGFzcyBtZW1fZnVuMV90CisgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbiZsdDtUKiwgQSwgUyZndDsgeworcHVibGljOgorICBleHBsaWNpdCBtZW1fZnVuMV90KFMgKFQ6OipwKSg8c3Ryb25nPkE8L3N0cm9uZz4pKTsKKyAgUyBvcGVyYXRvcigpKFQqIHAsIDxzdHJvbmc+QTwvc3Ryb25nPiB4KSBjb25zdDsKK307Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPk5vdGUgdGhhdCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIDx0dD5vcGVyYXRvcigpPC90dD4gaXMgZXhhY3RseSB0aGUgc2FtZQorICB0eXBlIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgbWVtYmVyIGZ1bmN0aW9uLiBJZiB0aGlzIGlzIGEgdmFsdWUgdHlwZSwgdGhlCisgIGFyZ3VtZW50IHdpbGwgYmUgcGFzc2VkIGJ5IHZhbHVlIGFuZCBjb3BpZWQgdHdpY2UuPC9wPgorCisgIDxwPkhvd2V2ZXIsIGlmIHdlIHdlcmUgdG8gdHJ5IGFuZCBlbGltaW5hdGUgdGhpcyBpbmVmZmljaWVuY3kgYnkgaW5zdGVhZAorICBkZWNsYXJpbmcgdGhlIGFyZ3VtZW50IGFzIDx0dD5jb25zdCZuYnNwO0EmYW1wOzwvdHQ+LCB0aGVuIGlmIEEgd2VyZSBhCisgIHJlZmVyZW5jZSB0eXBlLCB3ZSB3b3VsZCBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgcmVmZXJlbmNlLCB3aGljaCBpcworICBjdXJyZW50bHkgaWxsZWdhbCAoYnV0IHNlZSA8YSBocmVmPQorICAiaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMxMDYiPkMrKyBjb3JlCisgIGxhbmd1YWdlIGlzc3VlIG51bWJlciAxMDYpPC9hPjwvcD4KKworICA8cD5TbyB0aGUgd2F5IGluIHdoaWNoIHdlIHdhbnQgdG8gZGVjbGFyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IGZvcgorICA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgdGhlIG1lbWJlciBmdW5jdGlvbidzCisgIGFyZ3VtZW50IGlzIGEgcmVmZXJlbmNlLiBJZiBpdCBpcyBhIHJlZmVyZW5jZSwgd2Ugd2FudCB0byBkZWNsYXJlIGl0IHNpbXBseQorICBhcyA8dHQ+QTwvdHQ+OyBpZiBpdCBpcyBhIHZhbHVlIHdlIHdhbnQgdG8gZGVjbGFyZSBpdCBhcworICA8dHQ+Y29uc3QmbmJzcDtBJmFtcDs8L3R0Pi48L3A+CisKKyAgPHA+VGhlIEJvb3N0IDxhIGhyZWY9Ii4uL3V0aWxpdHkvY2FsbF90cmFpdHMuaHRtIj5jYWxsX3RyYWl0czwvYT4gY2xhc3MKKyAgdGVtcGxhdGUgY29udGFpbnMgYSA8dHQ+cGFyYW1fdHlwZTwvdHQ+IHR5cGVkZWYsIHdoaWNoIHVzZXMgcGFydGlhbAorICBzcGVjaWFsaXNhdGlvbiB0byBtYWtlIHByZWNpc2VseSB0aGlzIGRlY2lzaW9uLiBCeSBkZWNsYXJpbmcgdGhlCisgIDx0dD5vcGVyYXRvcigpPC90dD4gYXM8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK1Mgb3BlcmF0b3IoKShUKiBwLCB0eXBlbmFtZSBjYWxsX3RyYWl0cyZsdDtBJmd0Ozo6cGFyYW1fdHlwZSB4KSBjb25zdAorPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD53ZSBhY2hpZXZlIHRoZSBkZXNpcmVkIHJlc3VsdCAtIHdlIGltcHJvdmUgZWZmaWNpZW5jeSB3aXRob3V0IGdlbmVyYXRpbmcKKyAgcmVmZXJlbmNlcyB0byByZWZlcmVuY2VzLjwvcD4KKworICA8aDM+TGltaXRhdGlvbnM8L2gzPgorCisgIDxwPlRoZSBjYWxsIHRyYWl0cyB0ZW1wbGF0ZSB1c2VkIHRvIHJlYWxpc2Ugc29tZSBpbXByb3ZlbWVudHMgcmVsaWVzIG9uCisgIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24sIHNvIHRoZXNlIGltcHJvdmVtZW50cyBhcmUgb25seSBhdmFpbGFibGUgb24KKyAgY29tcGlsZXJzIHRoYXQgc3VwcG9ydCB0aGF0IGZlYXR1cmUuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB0aGUgYXJndW1lbnQKKyAgcGFzc2VkIHRvIHRoZSBtZW1iZXIgZnVuY3Rpb24gKGluIHRoZSA8dHQ+bWVtX2Z1bjFfdDwvdHQ+IGZhbWlseSkgd2lsbAorICBhbHdheXMgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSwgdGh1cyBnZW5lcmF0aW5nIHRoZSBwb3NzaWJpbGl0eSBvZgorICByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMuPC9wPgorICA8aHI+CisKKyAgPHA+PGEgaHJlZj0iaHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPXJlZmVyZXIiPjxpbWcgYm9yZGVyPSIwIiBzcmM9CisgICIuLi8uLi9kb2MvaW1hZ2VzL3ZhbGlkLWh0bWw0MDEucG5nIiBhbHQ9IlZhbGlkIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwiCisgIGhlaWdodD0iMzEiIHdpZHRoPSI4OCI+PC9hPjwvcD4KKworICA8cD5SZXZpc2VkIAorICA8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBzLXR5cGU9IkVESVRFRCIgcy1mb3JtYXQ9IiVkICVCLCAlWSIgc3RhcnRzcGFuIC0tPjAyIERlY2VtYmVyLCAyMDA2PCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgZW5kc3BhbiBpLWNoZWNrc3VtPSIzODUxMCIgLS0+PC9wPgorCisgIDxwPjxpPkNvcHlyaWdodCAmY29weTsgMjAwMCBDYWRlbnphIE5ldyBaZWFsYW5kIEx0ZC48L2k+PC9wPgorCisgIDxwPjxpPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQorICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKKyAgY29weSBhdCA8YSBocmVmPQorICAiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvaT48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvbmVnYXRvcnMuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9uZWdhdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzE3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvbmVnYXRvcnMuaHRtbApAQCAtMCwwICsxLDE1OCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuLXVzIj4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiPgorCisgIDx0aXRsZT5Cb29zdCBGdW5jdGlvbiBPYmplY3QgQWRhcHRlciBMaWJyYXJ5PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+CisgIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiMwMDdGN0YiIGNlbGxwYWRkaW5nPSIyIiBzdW1tYXJ5PSIiPgorICAgIDx0cj4KKyAgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9CisgICAgICAiYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+SG9tZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uL2xpYnJhcmllcy5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkxpYnJhcmllczwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9wZW9wbGUuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5QZW9wbGU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9tb3JlL2ZhcS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkZBUTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Ii4uLy4uL21vcmUvaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Nb3JlPC9iaWc+PC9mb250PjwvYT48L3RkPgorICAgIDwvdHI+CisgIDwvdGFibGU+CisKKyAgPGgxPk5lZ2F0b3JzPC9oMT4KKworICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KKyAgcHJvdmlkZXMgZW5oYW5jZWQgdmVyc2lvbnMgb2YgYm90aCB0aGUgbmVnYXRvciBhZGFwdGVycyBmcm9tIHRoZSBDKysKKyAgU3RhbmRhcmQgTGlicmFyeSAoJnNlY3Q7MjAuMy41KTo8L3A+CisKKyAgPHVsPgorICAgIDxsaT48dHQ+dW5hcnlfbmVnYXRlPC90dD48L2xpPgorCisgICAgPGxpPjx0dD5iaW5hcnlfbmVnYXRlPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPkFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVscGVyIGZ1bmN0aW9uczwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD5ub3QxPC90dD48L2xpPgorCisgICAgPGxpPjx0dD5ub3QyPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPkhvd2V2ZXIsIHRoZSBuZWdhdG9ycyBpbiB0aGlzIGxpYnJhcnkgaW1wcm92ZSBvbiB0aGUgc3RhbmRhcmQgdmVyc2lvbnMKKyAgaW4gdHdvIHdheXM6PC9wPgorCisgIDx1bD4KKyAgICA8bGk+VGhleSB1c2UgPGEgaHJlZj0iZnVuY3Rpb25fdHJhaXRzLmh0bWwiPmZ1bmN0aW9uIG9iamVjdCB0cmFpdHM8L2E+IHRvCisgICAgYXZvaWQgdGhlIG5lZWQgZm9yIDx0dD5wdHJfZnVuPC90dD4gd2hlbiBuZWdhdGluZyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuCisgICAgYW4gYWRhcHRhYmxlIGZ1bmN0aW9uIG9iamVjdC48L2xpPgorCisgICAgPGxpPlRoZXkgdXNlIEJvb3N0IDxhIGhyZWY9CisgICAgIi4uL3V0aWxpdHkvY2FsbF90cmFpdHMuaHRtIj5jYWxsJm5ic3A7dHJhaXRzPC9hPiB0byBkZXRlcm1pbmUgdGhlIGJlc3QKKyAgICB3YXkgdG8gZGVjbGFyZSB0aGVpciBhcmd1bWVudHMgYW5kIHBhc3MgdGhlbSB0aHJvdWdoIHRvIHRoZSBhZGFwdGVkCisgICAgZnVuY3Rpb24gKHNlZSA8YSBocmVmPSIjYXJndW1lbnRzIj5iZWxvdzwvYT4pLjwvbGk+CisgIDwvdWw+CisKKyAgPGgzPlVzYWdlPC9oMz4KKworICA8cD5Vc2FnZSBpcyBpZGVudGljYWwgdG8gdGhlIHN0YW5kYXJkIG5lZ2F0b3JzLiBGb3IgZXhhbXBsZSw8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2Jvb2wgYmFkKGNvbnN0IEZvbyAmYW1wO2ZvbykgeyAuLi4gfQorLi4uCitzdGQ6OnZlY3RvciZsdDtGb28mZ3Q7IGM7CisuLi4KK3N0ZDo6ZmluZF9pZihjLmJlZ2luKCksIGMuZW5kKCksIGJvb3N0Ojpub3QxKGJhZCkpOworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8aDMgaWQ9ImFyZ3VtZW50cyI+QXJndW1lbnQgVHlwZXM8L2gzPgorCisgIDxwPlRoZSBDKysgU3RhbmRhcmQgKCZzZWN0OzIwLjMuNSkgZGVmaW5lcyB1bmFyeSBuZWdhdGUgbGlrZSB0aGlzIChiaW5hcnkKKyAgbmVnYXRlIGlzIHNpbWlsYXIpOjwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordGVtcGxhdGUgJmx0O2NsYXNzIFByZWRpY2F0ZSZndDsKKyAgY2xhc3MgdW5hcnlfbmVnYXRlCisgICAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb24mbHQ7dHlwZW5hbWUgUHJlZGljYXRlOjphcmd1bWVudF90eXBlLGJvb2wmZ3Q7IHsKK3B1YmxpYzoKKyAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IFByZWRpY2F0ZSZhbXA7IHByZWQpOworICBib29sIG9wZXJhdG9yKCkoPHN0cm9uZz5jb25zdCB0eXBlbmFtZSBQcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmYW1wOzwvc3Ryb25nPiB4KSBjb25zdDsKK307Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPk5vdGUgdGhhdCBpZiB0aGUgUHJlZGljYXRlJ3MgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PiBpcyBhIHJlZmVyZW5jZSwgdGhlCisgIHR5cGUgb2YgPHR0Pm9wZXJhdG9yKCk8L3R0PidzIGFyZ3VtZW50IHdvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIGEgcmVmZXJlbmNlLgorICBDdXJyZW50bHkgdGhpcyBpcyBpbGxlZ2FsIGluIEMrKyAoYnV0IHNlZSB0aGUgPGEgaHJlZj0KKyAgImh0dHA6Ly9hbnViaXMuZGt1dWcuZGsvanRjMS9zYzIyL3dnMjEvZG9jcy9jd2dfYWN0aXZlLmh0bWwjMTA2Ij5DKysKKyAgc3RhbmRhcmQgY29yZSBsYW5ndWFnZSBhY3RpdmUgaXNzdWVzIGxpc3Q8L2E+KS48L3A+CisKKyAgPHA+SG93ZXZlciwgaWYgd2UgaW5zdGVhZCBkZWZpbmVkIDx0dD5vcGVyYXRvcigpPC90dD4gdG8gYWNjZXB0IFByZWRpY2F0ZSdzCisgIGFyZ3VtZW50X3R5cGUgdW5tb2RpZmllZCwgdGhpcyB3b3VsZCBiZSBuZWVkbGVzc2x5IGluZWZmaWNpZW50IGlmIGl0IHdlcmUgYQorICB2YWx1ZSB0eXBlOyB0aGUgYXJndW1lbnQgd291bGQgYmUgY29waWVkIHR3aWNlIC0gb25jZSB3aGVuIGNhbGxpbmcKKyAgPHR0PnVuYXJ5X25lZ2F0ZTwvdHQ+J3MgPHR0Pm9wZXJhdG9yKCk8L3R0PiwgYW5kIGFnYWluIHdoZW4KKyAgPHR0Pm9wZXJhdG9yKCk8L3R0PiBjYWxsZWQgdGhlIGFkYXB0ZWQgZnVuY3Rpb24uPC9wPgorCisgIDxwPlNvIGhvdyB3ZSB3YW50IHRvIGRlY2xhcmUgdGhlIGFyZ3VtZW50IGZvciA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGRlcGVuZHMKKyAgb24gd2hldGhlciBvciBub3QgdGhlIFByZWRpY2F0ZSdzIDx0dD5hcmd1bWVudF90eXBlPC90dD4gaXMgYSByZWZlcmVuY2UuIElmCisgIGl0IGlzIGEgcmVmZXJlbmNlLCB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgc2ltcGx5IGFzIDx0dD5hcmd1bWVudF90eXBlPC90dD47CisgIGlmIGl0IGlzIGEgdmFsdWUgd2Ugd2FudCB0byBkZWNsYXJlIGl0IGFzCisgIDx0dD5jb25zdCZuYnNwO2FyZ3VtZW50X3R5cGUmYW1wOzwvdHQ+LjwvcD4KKworICA8cD5UaGUgQm9vc3QgPGEgaHJlZj0iLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGxfdHJhaXRzPC9hPiBjbGFzcworICB0ZW1wbGF0ZSBjb250YWlucyBhIDx0dD5wYXJhbV90eXBlPC90dD4gdHlwZWRlZiwgd2hpY2ggdXNlcyBwYXJ0aWFsCisgIHNwZWNpYWxpc2F0aW9uIHRvIG1ha2UgcHJlY2lzZWx5IHRoaXMgZGVjaXNpb24uIElmIHdlIHdlcmUgdG8gZGVjbGFyZQorICA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGFzPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Citib29sIG9wZXJhdG9yKCkodHlwZW5hbWUgY2FsbF90cmFpdHMmbHQ7dHlwZW5hbWUgUHJlZGljYXRlOjphcmd1bWVudF90eXBlJmd0Ozo6cGFyYW1fdHlwZSB4KSBjb25zdAorPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD50aGUgZGVzaXJlZCByZXN1bHQgd291bGQgYmUgYWNoaWV2ZWQgLSB3ZSB3b3VsZCBlbGltaW5hdGUgcmVmZXJlbmNlcyB0bworICByZWZlcmVuY2VzIHdpdGhvdXQgbG9zcyBvZiBlZmZpY2llbmN5LiBJbiBmYWN0LCB0aGUgYWN0dWFsIGRlY2xhcmF0aW9uIGlzCisgIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSBvZiB0aGUgdXNlIG9mIGZ1bmN0aW9uIG9iamVjdCB0cmFpdHMsIGJ1dAorICB0aGUgZWZmZWN0IHJlbWFpbnMgdGhlIHNhbWUuPC9wPgorCisgIDxoMz5MaW1pdGF0aW9uczwvaDM+CisKKyAgPHA+Qm90aCB0aGUgZnVuY3Rpb24gb2JqZWN0IHRyYWl0cyBhbmQgY2FsbCB0cmFpdHMgdXNlZCB0byByZWFsaXNlIHRoZXNlCisgIGltcHJvdmVtZW50cyByZWx5IG9uIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24sIHRoZXNlIGltcHJvdmVtZW50cyBhcmUgb25seQorICBhdmFpbGFibGUgb24gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCB0aGF0IGZlYXR1cmUuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB0aGUKKyAgbmVnYXRvcnMgaW4gdGhpcyBsaWJyYXJ5IGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSB0aG9zZSBpbiB0aGUgU3RhbmRhcmQgLQorICA8dHQ+cHRyX2Z1bjwvdHQ+IHdpbGwgYmUgcmVxdWlyZWQgdG8gYWRhcHQgZnVuY3Rpb25zLCBhbmQgcmVmZXJlbmNlcyB0bworICByZWZlcmVuY2VzIHdpbGwgbm90IGJlIGF2b2lkZWQuPC9wPgorICA8aHI+CisKKyAgPHA+PGEgaHJlZj0iaHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPXJlZmVyZXIiPjxpbWcgYm9yZGVyPSIwIiBzcmM9CisgICIuLi8uLi9kb2MvaW1hZ2VzL3ZhbGlkLWh0bWw0MDEucG5nIiBhbHQ9IlZhbGlkIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwiCisgIGhlaWdodD0iMzEiIHdpZHRoPSI4OCI+PC9hPjwvcD4KKworICA8cD5SZXZpc2VkIAorICA8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBzLXR5cGU9IkVESVRFRCIgcy1mb3JtYXQ9IiVkICVCLCAlWSIgc3RhcnRzcGFuIC0tPjAyCisgIERlY2VtYmVyLCAyMDA2PCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgZW5kc3BhbiBpLWNoZWNrc3VtPSIzODUxMCIgLS0+PC9wPgorCisgIDxwPjxpPkNvcHlyaWdodCAmY29weTsgMjAwMCBDYWRlbnphIE5ldyBaZWFsYW5kIEx0ZC48L2k+PC9wPgorCisgIDxwPjxpPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQorICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKKyAgY29weSBhdCA8YSBocmVmPQorICAiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvaT48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzEzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvSmFtZmlsZS52MgpAQCAtMCwwICsxLDMyIEBACisKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKKyMgKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBjb3B5IGF0CisjIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyMgSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgorCitpbXBvcnQgcXVpY2tib29rIDsKK3VzaW5nIGJvb3N0Ym9vayA7CisKK2RveHlnZW4gcmVmZXJlbmNlCisgICAgOiAgIC4uLy4uLy4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAKKyAgICAgICAgLi4vLi4vLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAKKyAgICA6ICAgPHJlZnRpdGxlPiJSZWZlcmVuY2UiCisgICAgICAgIDxkb3h5Z2VuOnBhcmFtPlBSRURFRklORUQ9IkRPWFlHRU4iCisgICAgICAgIDxkb3h5Z2VuOnBhcmFtPlFVSUVUPVlFUworICAgICAgICA8ZG94eWdlbjpwYXJhbT5XQVJOX0lGX1VORE9DVU1FTlRFRD1OTworICAgICAgICA8ZG94eWdlbjpwYXJhbT5ISURFX1VORE9DX01FTUJFUlM9WUVTCisgICAgICAgIDxkb3h5Z2VuOnBhcmFtPkhJREVfVU5ET0NfQ0xBU1NFUz1ZRVMKKyAgICAgICAgPGRveHlnZW46cGFyYW0+QUxJQVNFUz0iIFBhcmFtcz1cIjxiPlBhcmFtZXRlcnM6PC9iPiA8dGFibGUgYm9yZGVyPSIwIj5cIiBQYXJhbXsyfT1cIjx0cj48dGQ+PGI+PHR0PlxcMTwvdHQ+PC9iPjwvdGQ+PHRkPlxcMjwvdGQ+PC90cj5cIiBFbmRQYXJhbXM9XCI8L3RhYmxlPlwiIFJldHVybnM9XCI8Yj5SZXR1cm5zOjwvYj5cIiBOb3RlPVwiPGI+Tm90ZTo8L2I+XCIgV2FybmluZz1cIjxiPldhcm5pbmc6PC9iPlwiIFNlZT1cIjxiPlNlZTo8L2I+XCIgUmVmU2VjdHsyfT1cIlxceG1sb25seTxsaW5rIGxpbmtlbmQ9J2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLlxcMSc+XFwyPC9saW5rPlxcZW5keG1sb25seVwiIFJlZkNsYXNzezF9PVwiXFx4bWxvbmx5PGNvbXB1dGVyb3V0cHV0PjxjbGFzc25hbWUgYWx0PSdcXDEnPlxcMTwvY2xhc3NuYW1lPjwvY29tcHV0ZXJvdXRwdXQ+XFxlbmR4bWxvbmx5XCIgUmVmRnVuY3sxfT1cIlxceG1sb25seTxjb21wdXRlcm91dHB1dD48ZnVuY3Rpb25uYW1lIGFsdD0nXFwxJz5cXDE8L2Z1bmN0aW9ubmFtZT48L2NvbXB1dGVyb3V0cHV0PlxcZW5keG1sb25seVwiIFJlZk1hY3JvezF9PVwiXFx4bWxvbmx5PGNvbXB1dGVyb3V0cHV0PjxtYWNyb25hbWUgYWx0PSdcXDEnPlxcMTwvbWFjcm9uYW1lPjwvY29tcHV0ZXJvdXRwdXQ+XFxlbmR4bWxvbmx5XCIgIgorICAgIDsKKworeG1sIHFiayA6IG92ZXJsb2FkZWRfZnVuY3Rpb24ucWJrIDogPGRlcGVuZGVuY3k+cmVmZXJlbmNlIDsKKworYm9vc3Rib29rIGRvYyA6IHFiaworICAgIDogICA8eHNsOnBhcmFtPmJvb3N0LnJvb3Q9Li4vLi4vLi4vLi4vLi4KKyAgICAgICAgPHhzbDpwYXJhbT5ib29zdC5kZWZhdWx0cz1Cb29zdAorICAgICAgICA8Zm9ybWF0PnBkZjo8eHNsOnBhcmFtPmJvb3N0LnVybC5wcmVmaXg9aHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvcmVsZWFzZS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbAorICAgIDsKKworaW5zdGFsbCBwZGZpbnN0YWxsIDogZG9jLzxmb3JtYXQ+cGRmIDogPGxvY2F0aW9uPi4gPGluc3RhbGwtdHlwZT5QREYgPG5hbWU+b3ZlcmxvYWRlZF9mdW5jdGlvbi5wZGYgOworZXhwbGljaXQgcGRmaW5zdGFsbCA7CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmFmMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbApAQCAtMCwwICsxLDU0IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPk1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCZndDsiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+TWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L3NwYW4+PC9oMj4KKzxwPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYICYjODIxMjsgU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbnMgYmVpbmcgb3ZlcmxvYWRlZC4gPC9wPgorPC9kaXY+Cis8aDIgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2Rpdi10aXRsZSI+U3lub3BzaXM8L2gyPgorPGRpdiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij48cHJlIGNsYXNzPSJzeW5vcHNpcyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEluIGhlYWRlcjogJmx0OzxhIGNsYXNzPSJsaW5rIiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OyI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHA8L2E+Jmd0OworCis8L3NwYW4+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L3ByZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImlkODIxNTU2Ij48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPklmIHRoaXMgbWFjcm8gaXMgbGVmdCB1bmRlZmluZWQgYnkgdGhlIHVzZXIsIGl0IGhhcyBhIGRlZmF1bHQgdmFsdWUgb2YgNSAoaW5jcmVhc2luZyB0aGlzIG51bWJlciBtaWdodCBpbmNyZWFzZSBjb21waWxhdGlvbiB0aW1lKS4gV2hlbiBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoaXMgbWFjcm8gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG51bWJlci48L3A+Cis8cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5TZWU6PC9zdHJvbmc+PC9zcGFuPiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4gR2V0dGluZyBTdGFydGVkPC9hPiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4uIDwvcD4KKzwvZGl2PgorPC9kaXY+Cis8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgYWxpZ249ImxlZnQiPjwvdGQ+Cis8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgJiMxNjk7IDIwMTEsIDIwMTIgTG9yZW56byBDYW1pbml0aTxwPgorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHNlZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKKyAgICAgIDwvcD4KKzwvZGl2PjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWJiNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbApAQCAtMCwwICsxLDU0IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPk1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCZndDsiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9hY2tub3dsZWRnbWVudHMuaHRtbCIgdGl0bGU9IkFja25vd2xlZGdtZW50cyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+TWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L3NwYW4+PC9oMj4KKzxwPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYICYjODIxMjsgU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG92ZXJsb2FkZWQuIDwvcD4KKzwvZGl2PgorPGgyIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0icmVmc3lub3BzaXNkaXYtdGl0bGUiPlN5bm9wc2lzPC9oMj4KKzxkaXYgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+PHByZSBjbGFzcz0ic3lub3BzaXMiPjxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBJbiBoZWFkZXI6ICZsdDs8YSBjbGFzcz0ibGluayIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCZndDsiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwPC9hPiZndDsKKworPC9zcGFuPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC9wcmU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDgyMTYxNCI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD5JZiB0aGlzIG1hY3JvIGlzIGxlZnQgdW5kZWZpbmVkIGJ5IHRoZSB1c2VyLCBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlIG9mIDUgKGluY3JlYXNpbmcgdGhpcyBudW1iZXIgbWlnaHQgaW5jcmVhc2UgY29tcGlsYXRpb24gdGltZSkuIFdoZW4gZGVmaW5lZCBieSB0aGUgdXNlciwgdGhpcyBtYWNybyBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAyIChiZWNhdXNlIGF0IGxlYXN0IHR3byBkaXN0aW5jdCBmdW5jdGlvbnMgbmVlZCB0byBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGFuIG92ZXJsb2FkKS48L3A+Cis8cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5TZWU6PC9zdHJvbmc+PC9zcGFuPiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4gR2V0dGluZyBTdGFydGVkPC9hPiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4uIDwvcD4KKzwvZGl2PgorPC9kaXY+Cis8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgYWxpZ249ImxlZnQiPjwvdGQ+Cis8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgJiMxNjk7IDIwMTEsIDIwMTIgTG9yZW56byBDYW1pbml0aTxwPgorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHNlZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKKyAgICAgIDwvcD4KKzwvZGl2PjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjVmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iYm9vc3QubWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5GdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PC9oMj4KKzxwPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24gJiM4MjEyOyBNYWtlIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHdpdGhvdXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiB0eXBlcy4gPC9wPgorPC9kaXY+Cis8aDIgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2Rpdi10aXRsZSI+U3lub3BzaXM8L2gyPgorPGRpdiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij48cHJlIGNsYXNzPSJzeW5vcHNpcyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEluIGhlYWRlcjogJmx0OzxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDsiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA8L2E+Jmd0OworCis8L3NwYW4+Cis8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiAKKyAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5fX2Z1bmN0aW9uX3R5cGVfXzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl9fZnVuY3Rpb25fdHlwZV9fPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IAorICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gZjE8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiBmMjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPjwvcHJlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iaWQ4MjEzNzYiPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+VGhpcyBmdW5jdGlvbiB0ZW1wbGF0ZSBjcmVhdGVzIGFuZCByZXR1cm5zIGFuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPjwvY29kZT4gb2JqZWN0IHRoYXQgb3ZlcmxvYWRzIGFsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmYxPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mMjwvY29kZT4sIGV0Yy48L3A+Cis8cD5UaGUgZnVuY3Rpb24gdHlwZXMgYXJlIGludGVybmFsbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZXMgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IHNwZWNpZmllZC4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHRlbXBsYXRlIHVzdWFsbHkgaGFzIGEgbW9yZSBjb25jaXNlIHN5bnRheCB3aGVuIGNvbXBhcmVkIHdpdGggIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+PC9jb2RlPi4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHRoZSBleHBsaWNpdCB0eXBlIG9mIHRoZSByZXR1cm5lZCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT48L2NvZGU+IG9iamVjdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGtub3duIChlLmcuLCB3aGVuIHVzZWQgd2l0aCBCb29zdC5UeXBlb2YncyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJPT1NUX0FVVE88L2NvZGU+LCBDKysxMSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF1dG88L2NvZGU+LCBvciB3aGVuIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCBpcyBoYW5kbGVkIHVzaW5nIGEgZnVuY3Rpb24gdGVtcGxhdGUgcGFyYW1ldGVyLCBzZWUgdGhlICA8YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCIgdGl0bGU9IlR1dG9yaWFsIj4gVHV0b3JpYWw8L2E+IHNlY3Rpb24pLjwvcD4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gb3ZlcmxvYWQgaXMgZ2l2ZW4gYnkgdGhlICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9jb2RlPjwvY29kZT4gY29uZmlndXJhdGlvbiBtYWNyby48L3A+Cis8cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPjwvc3Bhbj4gSW4gdGhpcyBkb2N1bWVudGF0aW9uLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9fZnVuY3Rpb25fdHlwZV9fPC9jb2RlPiBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIHN5bWJvbCB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkuPC9wPgorPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+U2VlOjwvc3Ryb25nPjwvc3Bhbj4gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPiBUdXRvcmlhbDwvYT4gc2VjdGlvbiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+PC9jb2RlPiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvYT48L2NvZGU+PC9jb2RlPi4gPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGM2MDBmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb248L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDsiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCIgdGl0bGU9IlJlZmVyZW5jZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Im1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0ibWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImJvb3N0Lm92ZXJsb2FkZWRfZnVuY3Rpb24iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PC9oMj4KKzxwPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uICYjODIxMjsgRnVuY3Rpb24gb2JqZWN0IHRvIG92ZXJsb2FkIGZ1bmN0aW9ucyB3aXRoIGRpc3RpbmN0IHNpZ25hdHVyZXMuIDwvcD4KKzwvZGl2PgorPGgyIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0icmVmc3lub3BzaXNkaXYtdGl0bGUiPlN5bm9wc2lzPC9oMj4KKzxkaXYgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+PHByZSBjbGFzcz0ic3lub3BzaXMiPjxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBJbiBoZWFkZXI6ICZsdDs8YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAmZ3Q7Ij5ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwPC9hPiZndDsKKworPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYxPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gRjI8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IAorPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+Cis8c3BhbiBjbGFzcz0ia2V5d29yZCI+cHVibGljPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46PC9zcGFuPgorICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCNib29zdC5vdmVybG9hZGVkX2Z1bmN0aW9uY29uc3RydWN0LWNvcHktZGVzdHJ1Y3QiPmNvbnN0cnVjdC9jb3B5L2Rlc3RydWN0PC9hPjwvc3Bhbj4KKyAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCNpZDI1OTA5MC1iYiI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm92ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gCisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorCisgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sI2lkMjU5MDIwLWJiIj5wdWJsaWMgbWVtYmVyIGZ1bmN0aW9uczwvYT48L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiAKKyAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCNpZDI1OTAyMy1iYiI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzFfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gCisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcyX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKyAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IAorICA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sI2lkMjU5MDQ5LWJiIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMV90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiAKKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzJfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+PC9wcmU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDgyMDU5MCI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD5UaGlzIGZ1bmN0aW9uIG9iamVjdCBhZ2dyZWdhdGVzIHRvZ2V0aGVyIGNhbGxzIHRvIGZ1bmN0aW9ucyBvZiBhbGwgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkYxPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GMjwvY29kZT4sIGV0YyB3aGljaCBtdXN0IGhhdmUgZGlzdGluY3QgZnVuY3Rpb24gc2lnbmF0dXJlcyBmcm9tIG9uZSBhbm90aGVyLjwvcD4KKzxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlBhcmFtZXRlcnM6PC9zdHJvbmc+PC9zcGFuPiA8L3A+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9InRhYmxlIj4KKzxjb2xncm91cD4KKzxjb2w+Cis8Y29sPgorPC9jb2xncm91cD4KKzx0Ym9keT48dHI+Cis8dGQ+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+aTwvZW0+PC9zcGFuPjwvY29kZT48L3N0cm9uZz48L3NwYW4+PC90ZD4KKzx0ZD5FYWNoIGZ1bmN0aW9uIHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBzeW50YXggKHdoaWNoIGlzIEJvb3N0LkZ1bmN0aW9uJ3MgcHJlZmVycmVkIHN5bnRheCk6IDxwcmUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJ0YWJsZS1wcm9ncmFtbGlzdGluZyI+ICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZ3VtZW50MV90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJndW1nbmV0Ml90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgorPC9wcmU+ICA8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwPgorPC9wPgorPHA+SW4gc29tZSBjYXNlcywgdGhlICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4gZnVuY3Rpb24gdGVtcGxhdGUgY2FuIGJlIHVzZWZ1bCB0byBjb25zdHJ1Y3QgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3Qgd2l0aG91dCBleHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uIHR5cGVzLjwvcD4KKzxwPkF0IGxlYXN0IHR3byBkaXN0aW5jdCBmdW5jdGlvbiB0eXBlcyBtdXN0IGJlIHNwZWNpZmllZCAoYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIHRvIG92ZXJsb2FkIGJldHdlZW4gb25lIG9yIHplcm8gZnVuY3Rpb25zKS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byBvdmVybG9hZCBpcyBnaXZlbiBieSB0aGUgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9jb2RlPiBjb25maWd1cmF0aW9uIG1hY3JvLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyBmb3IgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGVzIGlzIGdpdmVuIGJ5IHRoZSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvYT48L2NvZGU+IGNvbmZpZ3VyYXRpb24gbWFjcm8uPC9wPgorPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+U2VlOjwvc3Ryb25nPjwvc3Bhbj4gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPiBUdXRvcmlhbDwvYT4gc2VjdGlvbiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Im1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9jb2RlPiwgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L2E+PC9jb2RlPiwgQm9vc3QuRnVuY3Rpb24uIDwvcD4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkODIwNzM4Ij48L2E+PGgzPgorPGEgbmFtZT0iYm9vc3Qub3ZlcmxvYWRlZF9mdW5jdGlvbmNvbnN0cnVjdC1jb3B5LWRlc3RydWN0Ij48L2E+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vdmVybG9hZGVkX2Z1bmN0aW9uPC9jb2RlPiAKKyAgICAgICAgcHVibGljCisgICAgICAgY29uc3RydWN0L2NvcHkvZGVzdHJ1Y3Q8L2gzPgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorPHByZSBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PGEgbmFtZT0iaWQyNTkwOTAtYmIiPjwvYT48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IAorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+PC9wcmU+Q29uc3RydWN0IHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdC4gPHA+QW55IGZ1bmN0aW9uIHBvaW50ZXIsIGZ1bmN0aW9uIHJlZmVyZW5jZSwgYW5kIG1vbm9tb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJvb3N0OjpmdW5jdGlvbjwvY29kZT4gZnVuY3Rpb24gb2JqZWN0IGNhbiBiZSBzcGVjaWZpZWQgYXMgcGFyYW1ldGVyLjwvcD4KKzxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+PC9zcGFuPiBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QgcG9zc2libGUgdG8gc3VwcG9ydCBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3RzIChhcyBleHBsYWluZWQgPGEgaHJlZj0iaHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9BcmNoaXZlcy9ib29zdC8yMDEyLzAzLzE5MTc0NC5waHAiIHRhcmdldD0iX3RvcCI+aGVyZTwvYT4pLiA8L3A+Cis8L2xpPjwvb2w+PC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkODIwODc0Ij48L2E+PGgzPgorPGEgbmFtZT0iaWQyNTkwMjAtYmIiPjwvYT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm92ZXJsb2FkZWRfZnVuY3Rpb248L2NvZGU+IHB1YmxpYyBtZW1iZXIgZnVuY3Rpb25zPC9oMz4KKzxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorPHByZSBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IAorPGEgbmFtZT0iaWQyNTkwMjMtYmIiPjwvYT48c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcxX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IAorICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzJfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPjwvcHJlPkNhbGwgb3BlcmF0b3IgbWF0Y2hpbmcgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gdHlwZSBzcGVjaWZpZWQgYXMgMXN0IHRlbXBsYXRlIHBhcmFtZXRlci4gPHA+VGhpcyB3aWxsIGluIHR1cm4gaW52b2tlIHRoZSBjYWxsIG9wZXJhdG9yIG9mIHRoZSAxc3QgZnVuY3Rpb24gcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gPC9wPgorPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorPHByZSBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IAorPGEgbmFtZT0iaWQyNTkwNDktYmIiPjwvYT48c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcxX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IAorICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzJfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPjwvcHJlPkNhbGwgb3BlcmF0b3IgbWF0Y2hpbmcgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gdHlwZSBzcGVjaWZpZWQgYXMgMm5kIHRlbXBsYXRlIHBhcmFtZXRlci4gPHA+VGhpcyB3aWxsIGluIHR1cm4gaW52b2tlIHRoZSBjYWxsIG9wZXJhdG9yIG9mIHRoZSAybmQgZnVuY3Rpb24gcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci48L3A+Cis8cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPjwvc3Bhbj4gU2ltaWxhciBjYWxsIG9wZXJhdG9ycyBhcmUgcHJlc2VudCBmb3IgYWxsIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkYxPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GMjwvY29kZT4sIGV0YyAoZXZlbiBpZiBub3QgZXhoYXVzdGl2ZWx5IGxpc3RlZCBieSB0aGlzIGRvY3VtZW50YXRpb24pLiA8L3A+Cis8L2xpPgorPC9vbD48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0ibWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1ZDQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+QWNrbm93bGVkZ21lbnRzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9hY2tub3dsZWRnbWVudHMiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmFja25vd2xlZGdtZW50cyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJhY2tub3dsZWRnbWVudHMuaHRtbCIgdGl0bGU9IkFja25vd2xlZGdtZW50cyI+QWNrbm93bGVkZ21lbnRzPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgTWFueSB0aGFua3MgdG8gTWF0aGlhcyBHYXVuYXJkIGZvciBzdWdnZXN0aW5nIHRvIGltcGxlbWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+CisgICAgICBhbmQgZm9yIHNvbWUgc2FtcGxlIGNvZGUuCisgICAgPC9wPgorPHA+CisgICAgICBUaGFua3MgdG8gSm9obiBCeXRoZXdheSBmb3Igc3VnZ2VzdGluZyB0byBpbXBsZW1lbnQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoYW5rcyB0byBOYXRoYW4gUmlkZ2UgZm9yIHN1Z2dlc3Rpb25zIG9uIGhvdyB0byBpbXBsZW1lbnQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoYW5rcyB0byBSb2JlcnQgU3Rld2FydCBmb3IgY29tbWVudGluZyBvbiB0aGUgbGlicmFyeSBuYW1lLgorICAgIDwvcD4KKzxwPgorICAgICAgTWFueSB0aGFua3MgdG8gdGhlIGVudGlyZSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZyIgdGFyZ2V0PSJfdG9wIj5Cb29zdDwvYT4gY29tbXVuaXR5CisgICAgICBhbmQgbWFpbGluZyBsaXN0IGZvciBwcm92aWRpbmcgdmFsdWFibGUgY29tbWVudHMgYWJvdXQgdGhpcyBsaWJyYXJ5IGFuZCBncmVhdAorICAgICAgaW5zaWdodHMgb24gdGhlIEMrKyBwcm9ncmFtbWluZyBsYW5ndWFnZS4KKyAgICA8L3A+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTllN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KKzx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ0dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0idHV0b3JpYWwuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9nZXR0aW5nX3N0YXJ0ZWQiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZCI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCIgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZworICAgIFN0YXJ0ZWQ8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5jb21waWxlcnNfYW5kX3BsYXRmb3JtcyI+Q29tcGlsZXJzCisgICAgICBhbmQgUGxhdGZvcm1zPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuaW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGl2PgorPHA+CisgICAgICBUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIHNldHVwIGEgc3lzdGVtIHRvIHVzZSB0aGlzIGxpYnJhcnkuCisgICAgPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9nZXR0aW5nX3N0YXJ0ZWRfY29tcGlsZXJzX2FuZF9wbGF0Zm9ybXMiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuY29tcGlsZXJzX2FuZF9wbGF0Zm9ybXMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmNvbXBpbGVyc19hbmRfcGxhdGZvcm1zIiB0aXRsZT0iQ29tcGlsZXJzIGFuZCBQbGF0Zm9ybXMiPkNvbXBpbGVycworICAgICAgYW5kIFBsYXRmb3JtczwvYT4KKzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8cD4KKyAgICAgICAgVGhlIGF1dGhvcnMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYW5kIHRlc3RlZCB0aGlzIGxpYnJhcnkgb246CisgICAgICA8L3A+Cis8ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIEMrKyA0LjUuMyAod2l0aCBhbmQgd2l0aG91dCBDKysxMSBmZWF0dXJlcworICAgICAgICAgICAgZW5hYmxlZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4tPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPisrPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PC9jb2RlPikKKyAgICAgICAgICAgIG9uIEN5Z3dpbi4KKyAgICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICBNaXNjcm9zb2Z0IFZpc3VhbCBDKysgKE1TVkMpIDguMCBvbiBXaW5kb3dzIDcuCisgICAgICAgICAgPC9saT4KKzwvb2w+PC9kaXY+Cis8cD4KKyAgICAgICAgU2VlIHRoZSBsaWJyYXJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RldmVsb3BtZW50L3Rlc3RzL3JlbGVhc2UvZGV2ZWxvcGVyL2Z1bmN0aW9uYWwtb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPnJlZ3Jlc3Npb25zCisgICAgICAgIHRlc3QgcmVzdWx0czwvYT4gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBjb21waWxlcnMgYW5kCisgICAgICAgIHBsYXRmb3Jtcy4gQ2hlY2sgdGhlIGxpYnJhcnkgcmVncmVzc2lvbiB0ZXN0IDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvSmFtZmlsZS52MiIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SmFtZmlsZS52MjwvY29kZT48L2E+CisgICAgICAgIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgY29tcGlsZXIuCisgICAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24gYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb25fZ2V0dGluZ19zdGFydGVkX2luc3RhbGxhdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5pbnN0YWxsYXRpb24iPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmluc3RhbGxhdGlvbiIgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgICBUaGlzIGxpYnJhcnkgaXMgY29tcG9zZWQgb2YgaGVhZGVyIGZpbGVzIG9ubHkuIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBwcmUtY29tcGlsZWQKKyAgICAgICAgb2JqZWN0IGZpbGUgd2hpY2ggbmVlZHMgdG8gYmUgaW5zdGFsbGVkLiBQcm9ncmFtbWVycyBjYW4gc2ltcGx5IGluc3RydWN0CisgICAgICAgIHRoZSBjb21waWxlciB3aGVyZSB0byBmaW5kIHRoZSBsaWJyYXJ5IGhlYWRlciBmaWxlcyAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+STwvc3Bhbj48L2NvZGU+IG9wdGlvbiBvbiBHQ0MsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkk8L3NwYW4+PC9jb2RlPiBvcHRpb24gb24gTVNWQywgZXRjKSBhbmQgY29tcGlsZSBjb2RlCisgICAgICAgIHVzaW5nIHRoZSBsaWJyYXJ5LgorICAgICAgPC9wPgorPHA+CisgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gb3ZlcmxvYWQgaXMgZ2l2ZW4gYnkgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9jb2RlPgorICAgICAgICBjb25maWd1cmF0aW9uIG1hY3JvLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyBmb3IgZWFjaCBvZgorICAgICAgICB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGUgaXMgZ2l2ZW4gYnkgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L2E+PC9jb2RlPgorICAgICAgICBjb25maWd1cmF0aW9uIG1hY3JvLiBBbGwgY29uZmlndXJhdGlvbiBtYWNyb3MgaGF2ZSBhcHByb3ByaWF0ZSBkZWZhdWx0IHZhbHVlcworICAgICAgICB3aGVuIHRoZXkgYXJlIGxlZnQgdW5kZWZpbmVkLgorICAgICAgPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InR1dG9yaWFsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDkzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsMjI4IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPlR1dG9yaWFsPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwiIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCIgdGl0bGU9IlJlZmVyZW5jZSI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24gYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb25fdHV0b3JpYWwiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9InR1dG9yaWFsLmh0bWwiIHRpdGxlPSJUdXRvcmlhbCI+VHV0b3JpYWw8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InR1dG9yaWFsLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmciPk92ZXJsb2FkaW5nPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ0dXRvcmlhbC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLndpdGhvdXRfZnVuY3Rpb25fdHlwZXMiPldpdGhvdXQKKyAgICAgIEZ1bmN0aW9uIFR5cGVzPC9hPjwvc3Bhbj48L2R0PgorPC9kbD48L2Rpdj4KKzxwPgorICAgICAgVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byB1c2UgdGhpcyBsaWJyYXJ5LgorICAgIDwvcD4KKzxkaXYgY2xhc3M9InNlY3Rpb24gYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb25fdHV0b3JpYWxfb3ZlcmxvYWRpbmciPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJ0dXRvcmlhbC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nIiB0aXRsZT0iT3ZlcmxvYWRpbmciPk92ZXJsb2FkaW5nPC9hPgorPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGRpc3RpbmN0IHNpZ25hdHVyZXM6CisgICAgICA8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEZ1bmN0aW9uIChhcyBwb2ludGVyKS48L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2lfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oJmFtcDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikoPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaV9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gRnVuY3Rpb24gcmVmZXJlbmNlLjwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2RfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikmZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBGdW5jdG9yLjwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgVGhpcyBsaWJyYXJ5IGhlYWRlciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDsiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA8L2E+PC9jb2RlPgorICAgICAgICBwcm92aWRlcyBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgdGhhdCBjcmVhdGVzIGEgc2luZ2xlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FuCisgICAgICAgIGJlIHVzZWQgdG8gY2FsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzZXBhcmF0ZSBmdW5jdGlvbgorICAgICAgICBuYW1lcyAoc2VlIGFsc28gPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9mdW5jdG9yLmNwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZnVuY3Rvci5jcHA8L2NvZGU+PC9hPgorICAgICAgICBhbmQgPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9pZGVudGl0eS5ocHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkZW50aXR5LmhwcDwvY29kZT48L2E+KToKKyAgICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm92ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7KTwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBBbGwgY2FsbHMgdmlhIHNpbmdsZSBgaWRlbnRpdHlgIGZ1bmN0aW9uLjwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYWJjIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4iYWJjIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgTm90ZSBob3cgZWFjaCBmdW5jdGlvbiB0eXBlIGlzIHBhc3NlZCBhcyBhIHRlbXBsYXRlIHBhcmFtZXRlciBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+IHVzaW5nCisgICAgICAgIHRoZSBmb2xsb3dpbmcgc3ludGF4ICh0aGlzIGlzIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb24iIHRhcmdldD0iX3RvcCI+Qm9vc3QuRnVuY3Rpb248L2E+J3MKKyAgICAgICAgcHJlZmVycmVkIHN5bnRheCk6CisgICAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmVzdWx0LXR5cGU8L2VtPjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJndW1lbnQxLXR5cGU8L2VtPjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJndW1lbnQyLXR5cGU8L2VtPjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLik8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgICBUaGVuIHRoZSByZWxhdGl2ZSBmdW5jdGlvbiBwb2ludGVycywgZnVuY3Rpb24gcmVmZXJlbmNlcywgb3IgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb2x5bW9ycGhpc21fKGNvbXB1dGVyX3NjaWVuY2UpIiB0YXJnZXQ9Il90b3AiPm1vbm9tb3JwaGljCisgICAgICAgIGZ1bmN0aW9uPC9hPiBvYmplY3RzIGFyZSBwYXNzZWQgdG8gdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgICAgY29uc3RydWN0b3IgbWF0Y2hpbmcgdGhlIG9yZGVyIG9mIHRoZSBzcGVjaWZpZWQgdGVtcGxhdGUgcGFyYW1ldGVycy4gPHN1cD5bPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjAiIGhyZWY9IiNmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjAiIGNsYXNzPSJmb290bm90ZSI+MjwvYT5dPC9zdXA+IEluIHRoZSBhYm92ZSBleGFtcGxlLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjwvY29kZT4KKyAgICAgICAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciAodGhlIGZ1bmN0aW9uIGFkZHJlc3MgaXMgYXV0b21hdGljYWxseSB0YWtlbgorICAgICAgICBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lIGJ5IHRoZSBjb21waWxlciksIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PC9jb2RlPgorICAgICAgICBhcyBhIGZ1bmN0aW9uIHJlZmVyZW5jZSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PC9jb2RlPgorICAgICAgICBhcyBhIGZ1bmN0aW9uIG9iamVjdC4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBBbGwgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGVzIG11c3QgaGF2ZSBkaXN0aW5jdCBwYXJhbWV0ZXJzIGZyb20gb25lIGFub3RoZXIKKyAgICAgICAgKHNvIHRoZSBvdmVybG9hZGVkIGNhbGxzIGNhbiBiZSByZXNvbHZlZCBieSB0aGlzIGxpYnJhcnkpLiA8c3VwPls8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMSIgaHJlZj0iI2Z0bi5ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMSIgY2xhc3M9ImZvb3Rub3RlIj4zPC9hPl08L3N1cD4gSW4gb3JkZXIgdG8gY3JlYXRlIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyBuZWNlc3NhcnkKKyAgICAgICAgdG8gc3BlY2lmeSBhdCBsZWFzdCB0d28gZnVuY3Rpb24gdHlwZXMgKGJlY2F1c2UgdGhlcmUgaXMgbm90aGluZyB0byBvdmVybG9hZAorICAgICAgICBiZXR3ZWVuIG9uZSBvciB6ZXJvIGZ1bmN0aW9ucykuCisgICAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24gYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb25fdHV0b3JpYWxfd2l0aG91dF9mdW5jdGlvbl90eXBlcyI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLndpdGhvdXRfZnVuY3Rpb25fdHlwZXMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0idHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC53aXRob3V0X2Z1bmN0aW9uX3R5cGVzIiB0aXRsZT0iV2l0aG91dCBGdW5jdGlvbiBUeXBlcyI+V2l0aG91dAorICAgICAgRnVuY3Rpb24gVHlwZXM8L2E+Cis8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICAgIEZvciBjb252ZW5pZW5jZSwgdGhpcyBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUgd2hpY2ggYWxsb3dzIHRvIGNyZWF0ZSB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3Qgd2l0aG91dAorICAgICAgICBleHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uIHR5cGVzLiBUaGUgZnVuY3Rpb24gdHlwZXMgYXJlIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgZGVkdWNlZCBmcm9tIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGUgYXBwcm9wcmlhdGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICBpbnN0YW50aWF0aW9uIGlzIHJldHVybmVkIGJ5IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4uCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgVGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzZWQgdG9nZXRoZXIgd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPidzCisgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX0FVVE88L3NwYW4+PC9jb2RlPiAob3IgQysrMTEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+YXV0bzwvc3Bhbj48L2NvZGU+KS4gRm9yIGV4YW1wbGUgKHNlZSBhbHNvIDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvbWFrZV9kZWNsLmNwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bWFrZV9kZWNsLmNwcDwvY29kZT48L2E+CisgICAgICAgIGFuZCA8YSBocmVmPSIuLi8uLi8uLi90ZXN0L2lkZW50aXR5LmhwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWRlbnRpdHkuaHBwPC9jb2RlPjwvYT4pOgorICAgICAgPC9wPgorPHA+Cis8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX0FVVE88L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikpOzwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBOb3RlIGhvdyB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PC9jb2RlPgorICAgICAgICBoYXMgYmVlbiBjcmVhdGVkIHNwZWNpZnlpbmcgb25seSB0aGUgZnVuY3Rpb25zIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PC9jb2RlPiwKKyAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48L2NvZGU+LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPjwvY29kZT4gYW5kIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24KKyAgICAgICAgdHlwZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdGQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7KTwvc3Bhbj48L2NvZGU+LAorICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPiwgYW5kCisgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+IGFzCisgICAgICAgIHJlcXVpcmVkIGluc3RlYWQgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4KKyAgICAgICAgVGhlcmVmb3JlLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+CisgICAgICAgIHByb3ZpZGVzIGEgbW9yZSBjb25jaXNlIHN5bnRheCBpbiB0aGlzIGNvbnRleHQgd2hlbiBjb21wYXJlZCB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4uCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgQW5vdGhlciBjYXNlIHdoZXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgICAgY2FuIGJlIHVzZWZ1bCBpcyB3aGVuIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCBpcyBwYXNzZWQgdG8gYSBmdW5jdGlvbgorICAgICAgICB0ZW1wbGF0ZSB3aGljaCBjYW4gaG9sZCB0aGUgc3BlY2lmaWMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICB0eXBlIHVzaW5nIGEgdGVtcGxhdGUgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSAoc2VlIGFsc28gPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9tYWtlX2NhbGwuY3BwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tYWtlX2NhbGwuY3BwPC9jb2RlPjwvYT4KKyAgICAgICAgYW5kIDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZGVudGl0eS5ocHA8L2NvZGU+PC9hPik6CisgICAgICA8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y2hlY2s8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICA8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y2hlY2s8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikpOzwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgVGhlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICB1c2VzIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+CisgICAgICAgIHRvIGF1dG9tYXRpY2FsbHkgZGVkdWNlIHNvbWUgb2YgdGhlIGZ1bmN0aW9uIHR5cGVzLiBJbiBvcmRlciB0byBjb21waWxlIGNvZGUKKyAgICAgICAgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4KKyAgICAgICAgZW11bGF0aW9uIG1vZGUsIGFsbCB0eXBlcyBzaG91bGQgYmUgcHJvcGVybHkgcmVnaXN0ZXJlZCB1c2luZyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9UWVBFT0ZfUkVHSVNURVJfVFlQRTwvc3Bhbj48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9UWVBFT0ZfUkVHSVNURVJfVEVNUExBVEU8L3NwYW4+PC9jb2RlPiwgb3IgYXBwcm9wcmlhdGUKKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4gaGVhZGVycworICAgICAgICBzaG91bGQgYmUgaW5jbHVkZWQgKHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPgorICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbikuIEZvciB0aGUgYWJvdmUgZXhhbXBsZXMsIGl0IGlzIHN1ZmZpY2llbnQgdG8gaW5jbHVkZQorICAgICAgICB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4KKyAgICAgICAgaGVhZGVyIHRoYXQgcmVnaXN0ZXJzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48L2NvZGU+CisgICAgICAgICh0aGlzIGxpYnJhcnkgZG9lcyBub3QgcmVxdWlyZSB0byByZWdpc3RlciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjwvY29kZT4KKyAgICAgICAgZm9yIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+CisgICAgICAgIGVtdWxhdGlvbik6CisgICAgICA8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icHJlcHJvY2Vzc29yIj4jaW5jbHVkZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50eXBlb2Y8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ocHA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBObyBuZWVkIHRvIHJlZ2lzdGVyIGBib29zdDo6ZnVuY3Rpb25gLjwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3Rub3RlcyI+Cis8YnI+PGhyIHdpZHRoPSIxMDAiIGFsaWduPSJsZWZ0Ij4KKzxkaXYgY2xhc3M9ImZvb3Rub3RlIj48cD48c3VwPls8YSBpZD0iZnRuLmJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYwIiBocmVmPSIjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjAiIGNsYXNzPSJwYXJhIj4yPC9hPl0gPC9zdXA+CisgICAgICAgICAgRnVuY3Rpb24gcG9pbnRlcnMgYXJlIG9mIHRoZSBmb3JtIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZXN1bHQtdHlwZSA8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCopKDwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50MS10eXBlPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi4pPC9zcGFuPjwvY29kZT4gKHRoZQorICAgICAgICAgIEMrKyBjb21waWxlciBpcyB1c3VhbGx5IGFibGUgdG8gYXV0b21hdGljYWxseSBwcm9tb3RlIGEgZnVuY3Rpb24gbmFtZSB0bworICAgICAgICAgIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBhIGNvbnRleHQgd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGlzIGV4cGVjdGVkIGV2ZW4KKyAgICAgICAgICBpZiB0aGUgZnVuY3Rpb24gbmFtZSBpcyBub3QgcHJlZml4ZWQgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+PC9jb2RlPikuCisgICAgICAgICAgRnVuY3Rpb24gcmVmZXJlbmNlcyBhcmUgb2YgdGhlIGZvcm0gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJlc3VsdC10eXBlIDwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oJmFtcDspKDwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50MS10eXBlPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi4pPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgRnVuY3Rpb24gdHlwZXMgYXJlIG9mIHRoZSBmb3JtIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZXN1bHQtdHlwZSA8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50MS10eXBlPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi4pPC9zcGFuPjwvY29kZT4gKG5vdGUKKyAgICAgICAgICBob3cgdGhleSBsYWNrIG9mIGJvdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kjwvc3Bhbj48L2NvZGU+IGFuZAorICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPjwvY29kZT4gd2hlbiBjb21wYXJlZCB0byBmdW5jdGlvbgorICAgICAgICAgIHBvaW50ZXJzIGFuZCBmdW5jdGlvbiByZWZlcmVuY2VzKS4gRmluYWxseSwgbW9ub21vcnBoaWMgZnVuY3Rpb24gb2JqZWN0cworICAgICAgICAgIGFyZSBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aXRoIGEgbm9uLXRlbXBsYXRlIGNhbGwgb3BlcmF0b3Igb2YgdGhlIGZvcm0KKyAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmVzdWx0LXR5cGUgPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKSg8L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudDEtdHlwZTwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uKTwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdXBwb3J0IHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMKKyAgICAgICAgICAoc2VlIDxhIGhyZWY9Imh0dHA6Ly9saXN0cy5ib29zdC5vcmcvQXJjaGl2ZXMvYm9vc3QvMjAxMi8wMy8xOTE3NDQucGhwIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly9saXN0cy5ib29zdC5vcmcvQXJjaGl2ZXMvYm9vc3QvMjAxMi8wMy8xOTE3NDQucGhwPC9hPikuCisgICAgICAgIDwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3Rub3RlIj48cD48c3VwPls8YSBpZD0iZnRuLmJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYxIiBocmVmPSIjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjEiIGNsYXNzPSJwYXJhIj4zPC9hPl0gPC9zdXA+CisgICAgICAgICAgTm90ZSB0aGF0IGluIEMrKyB0aGUgZnVuY3Rpb24gcmVzdWx0IHR5cGUgaXMgbm90IHVzZWQgZm9yIG92ZXJsb2FkIHJlc29sdXRpb24KKyAgICAgICAgICAodG8gYXZvaWQgbWFraW5nIHRoZSBvdmVybG9hZCByZXNvbHV0aW9uIGNvbnRleHQgZGVwZW5kZW50KS4gVGhlcmVmb3JlLAorICAgICAgICAgIGF0IGxlYXN0IG9uZSBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycyBtdXN0IGJlIGRpc3RpbmN0IGZvciBlYWNoIHNwZWNpZmllZAorICAgICAgICAgIGZ1bmN0aW9uIHR5cGUuCisgICAgICAgIDwvcD48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgYWxpZ249ImxlZnQiPjwvdGQ+Cis8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgJiMxNjk7IDIwMTEsIDIwMTIgTG9yZW56byBDYW1pbml0aTxwPgorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHNlZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKKyAgICAgIDwvcD4KKzwvZGl2PjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmMwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTQ3IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbCIgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPjwvZGl2PgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+Cis8ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24iPjwvYT5DaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMDwvaDI+PC9kaXY+Cis8ZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPgorPHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+TG9yZW56bzwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkNhbWluaXRpIDxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ibWFpbHRvOmxvcmNhbWluaXRpQGdtYWlsLmNvbSI+bG9yY2FtaW5pdGlAZ21haWwuY29tPC9hPiZndDs8L2NvZGU+PC9zcGFuPgorPC9oMz48L2Rpdj48L2Rpdj4KKzxkaXY+PHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8L3A+PC9kaXY+Cis8ZGl2PjxkaXYgY2xhc3M9ImxlZ2Fsbm90aWNlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmxlZ2FsIj48L2E+PHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC9kaXY+Cis8L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+Cis8cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIj5HZXR0aW5nCisgICAgU3RhcnRlZDwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5jb21waWxlcnNfYW5kX3BsYXRmb3JtcyI+Q29tcGlsZXJzCisgICAgICBhbmQgUGxhdGZvcm1zPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuaW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwiPlR1dG9yaWFsPC9hPjwvc3Bhbj48L2R0PgorPGRkPjxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZyI+T3ZlcmxvYWRpbmc8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwud2l0aG91dF9mdW5jdGlvbl90eXBlcyI+V2l0aG91dAorICAgICAgRnVuY3Rpb24gVHlwZXM8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InJlZmVyZW5jZS5odG1sIj5SZWZlcmVuY2U8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+SGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OzwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj5IZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OzwvYT48L3NwYW4+PC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwiPkFja25vd2xlZGdtZW50czwvYT48L3NwYW4+PC9kdD4KKzwvZGw+Cis8L2Rpdj4KKzxwPgorICAgIFRoaXMgbGlicmFyeSBhbGxvd3MgdG8gb3ZlcmxvYWQgZGlmZmVyZW50IGZ1bmN0aW9ucyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIG9iamVjdC4KKyAgPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9pbnRyb2R1Y3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmludHJvZHVjdGlvbiI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmludHJvZHVjdGlvbiIgdGl0bGU9IkludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkaXN0aW5jdCBzaWduYXR1cmVzOgorICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gRnVuY3Rpb24gKGFzIHBvaW50ZXIpLjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaV9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPigmYW1wOzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSg8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBGdW5jdGlvbiByZWZlcmVuY2UuPC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZF9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2RfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEZ1bmN0b3IuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICA8L3A+Cis8cD4KKyAgICAgIEluc3RlYWQgb2YgY2FsbGluZyB0aGVtIHVzaW5nIHRoZWlyIHNlcGFyYXRlIG5hbWVzIChoZXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PC9jb2RlPgorICAgICAgaXMgZXF1aXZhbGVudCB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hc3NlcnQ8L3NwYW4+PC9jb2RlPik6CisgICAgICA8c3VwPls8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5pbnRyb2R1Y3Rpb24uZjAiIGhyZWY9IiNmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uLmYwIiBjbGFzcz0iZm9vdG5vdGUiPjE8L2E+XTwvc3VwPgorICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgPC9wPgorPHA+CisgICAgICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhpcyBsaWJyYXJ5IHRvIGNyZWF0ZSBhIHNpbmdsZSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Z1bmN0aW9uX292ZXJsb2FkaW5nIiB0YXJnZXQ9Il90b3AiPm92ZXJsb2FkZWQ8L2E+CisgICAgICBmdW5jdGlvbiBvYmplY3QgKG9yIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3RvciIgdGFyZ2V0PSJfdG9wIj5mdW5jdG9yPC9hPikKKyAgICAgIG5hbWVkIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjwvY29kZT4gdGhhdCBhZ2dyZWdhdGVzCisgICAgICB0b2dldGhlciB0aGUgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyAoc2VlIGFsc28gPGEgaHJlZj0iLi4vLi4vdGVzdC9mdW5jdG9yLmNwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZnVuY3Rvci5jcHA8L2NvZGU+PC9hPgorICAgICAgYW5kIDxhIGhyZWY9Ii4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZGVudGl0eS5ocHA8L2NvZGU+PC9hPik6CisgICAgPC9wPgorPHA+Cis8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDspPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEFsbCBjYWxscyB2aWEgc2luZ2xlIGBpZGVudGl0eWAgZnVuY3Rpb24uPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICA8L3A+Cis8cD4KKyAgICAgIE5vdGUgaG93IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB2aWEgYSBzaW5nbGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QKKyAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjwvY29kZT4gaW5zdGVhZCBvZiB1c2luZyB0aGVpcgorICAgICAgZGlmZmVyZW50IG5hbWVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PC9jb2RlPiwKKyAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PC9jb2RlPiwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PC9jb2RlPi4KKyAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3Rub3RlcyI+Cis8YnI+PGhyIHdpZHRoPSIxMDAiIGFsaWduPSJsZWZ0Ij4KKzxkaXYgY2xhc3M9ImZvb3Rub3RlIj48cD48c3VwPls8YSBpZD0iZnRuLmJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmludHJvZHVjdGlvbi5mMCIgaHJlZj0iI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmludHJvZHVjdGlvbi5mMCIgY2xhc3M9InBhcmEiPjE8L2E+XSA8L3N1cD4KKyAgICAgICAgSW4gbW9zdCBvZiB0aGUgZXhhbXBsZXMgcHJlc2VudGVkIGluIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlIEJvb3N0LkRldGFpbC9MaWdodHdlaWdodFRlc3QKKyAgICAgICAgKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA8L2NvZGU+KSBtYWNybyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjwvY29kZT4gaXMgdXNlZCB0byBjaGVjayBjb3JyZWN0bmVzcworICAgICAgICBjb25kaXRpb25zIChjb25jZXB0dWFsbHkgc2ltaWxhciB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hc3NlcnQ8L3NwYW4+PC9jb2RlPikuCisgICAgICAgIEEgZmFpbHVyZSBvZiB0aGUgY2hlY2tlZCBjb25kaXRpb24gZG9lcyBub3QgYWJvcnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwKKyAgICAgICAgaXQgd2lsbCBpbnN0ZWFkIG1ha2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXBvcnRfZXJyb3JzPC9zcGFuPjwvY29kZT4KKyAgICAgICAgcmV0dXJuIGEgbm9uLXplcm8gcHJvZ3JhbSBleGl0IGNvZGUuIFVzaW5nIEJvb3N0LkRldGFpbC9MaWdodHdlaWdodFRlc3QgYWxsb3dzCisgICAgICAgIHRvIGFkZCB0aGUgZXhhbXBsZXMgdG8gdGhlIGxpYnJhcnkgcmVncmVzc2lvbiB0ZXN0cyBzbyB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICB0aGV5IGFsd2F5cyBjb21waWxlIGFuZCBydW4gY29ycmVjdGx5LgorICAgICAgPC9wPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PHA+PHNtYWxsPkxhc3QgcmV2aXNlZDogQXByaWwgMjgsIDIwMTIgYXQgMDI6MTk6MTMgR01UPC9zbWFsbD48L3A+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPjwvZGl2PjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvcmVmZXJlbmNlLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9yZWZlcmVuY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE4OWYwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvcmVmZXJlbmNlLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KKzx0aXRsZT5SZWZlcmVuY2U8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiByZWZlcmVuY2UiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9InJlZmVyZW5jZSI+PC9hPlJlZmVyZW5jZTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiPkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDs8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+SGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCZndDs8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiBoZWFkZXJfYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImhlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48L2E+SGVhZGVyICZsdDs8YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwIiB0YXJnZXQ9Il90b3AiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA8L2E+Jmd0OzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8cD5PdmVybG9hZCBkaXN0aW5jdCBmdW5jdGlvbiBwb2ludGVycywgZnVuY3Rpb24gcmVmZXJlbmNlcywgYW5kIG1vbm9tb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMgaW50byBhIHNpbmdsZSBmdW5jdGlvbiBvYmplY3QuIDwvcD4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiAKKyAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl9fZnVuY3Rpb25fdHlwZV9fPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+X19mdW5jdGlvbl90eXBlX188L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gCisgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPjwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIGhlYWRlcl9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRfZnVuY3Rpb25fY29uZmlnX2hwcCI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImhlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+PC9hPkhlYWRlciAmbHQ7PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAiIHRhcmdldD0iX3RvcCI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHA8L2E+Jmd0OzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8cD5DaGFuZ2UgdGhlIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgbGlicmFyeS4gPC9wPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorCis8YSBjbGFzcz0ibGluayIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvYT4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC9hPjwvcHJlPgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL292ZXJsb2FkZWRfZnVuY3Rpb24ucWJrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL292ZXJsb2FkZWRfZnVuY3Rpb24ucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjY5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2Mvb3ZlcmxvYWRlZF9mdW5jdGlvbi5xYmsKQEAgLTAsMCArMSwxNzEgQEAKKworWy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aSBdCitbLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgXQorWy8gKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBjb3B5IGF0IF0KK1svIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorWy8gSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbiBdCisKK1tsaWJyYXJ5IEJvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uCisgICAgW3F1aWNrYm9vayAxLjVdCisgICAgW3ZlcnNpb24gMS4wLjBdCisgICAgW2NvcHlyaWdodCAyMDExLTIwMTIgTG9yZW56byBDYW1pbml0aV0KKyAgICBbcHVycG9zZSBvdmVybG9hZCBmdW5jdGlvbnMgd2l0aCBvbmUgZnVuY3Rpb24gb2JqZWN0XQorICAgIFtsaWNlbnNlCisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorICAgICAgICAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0XSkKKyAgICBdCisgICAgW2F1dGhvcnMgW0NhbWluaXRpIDxlbWFpbD5sb3JjYW1pbml0aUBnbWFpbC5jb208L2VtYWlsPiwgTG9yZW56b11dCisgICAgW2NhdGVnb3J5IEZ1bmN0aW9uIE9iamVjdHMgYW5kIEhpZ2hlci1PcmRlciBQcm9ncmFtbWluZ10KK10KKworW2RlZiBfX0ludHJvZHVjdGlvbl9fIFtsaW5rIGZ1bmN0aW9uYWxfb3ZlcmxvYWRlZF9mdW5jdGlvbi5pbnRyb2R1Y3Rpb24gSW50cm9kdWN0aW9uXV0KK1tkZWYgX19HZXR0aW5nX1N0YXJ0ZWRfXyBbbGluayBmdW5jdGlvbmFsX292ZXJsb2FkZWRfZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkIEdldHRpbmcgU3RhcnRlZF1dCitbZGVmIF9fVHV0b3JpYWxfXyBbbGluayBmdW5jdGlvbmFsX292ZXJsb2FkZWRfZnVuY3Rpb24udHV0b3JpYWwgVHV0b3JpYWxdXQorW2RlZiBfX0Jvb3N0X18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZyBCb29zdF1dCitbZGVmIF9fQm9vc3RfVGVzdF9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IEJvb3N0LlRlc3RdXQorW2RlZiBfX0Jvb3N0X0Z1bmN0aW9uX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uIEJvb3N0LkZ1bmN0aW9uXV0KK1tkZWYgX19Cb29zdF9UeXBlb2ZfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiBCb29zdC5UeXBlb2ZdXQorCitbaW1wb3J0IC4uL3Rlc3QvaWRlbnRpdHkuaHBwXQorW2ltcG9ydCAuLi90ZXN0L2Z1bmN0b3IuY3BwXQorW2ltcG9ydCAuLi90ZXN0L21ha2VfZGVjbC5jcHBdCitbaW1wb3J0IC4uL3Rlc3QvbWFrZV9jYWxsLmNwcF0KKworVGhpcyBsaWJyYXJ5IGFsbG93cyB0byBvdmVybG9hZCBkaWZmZXJlbnQgZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgZnVuY3Rpb24gb2JqZWN0LgorCitbc2VjdGlvbiBJbnRyb2R1Y3Rpb25dCisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdoaWNoIGhhdmUgZGlzdGluY3Qgc2lnbmF0dXJlczoKKworW2lkZW50aXR5X2RlY2xzXQorCitJbnN0ZWFkIG9mIGNhbGxpbmcgdGhlbSB1c2luZyB0aGVpciBzZXBhcmF0ZSBuYW1lcyAoaGVyZSBgQk9PU1RfVEVTVGAgaXMgZXF1aXZhbGVudCB0byBgYXNzZXJ0YCk6CitbZm9vdG5vdGUKK0luIG1vc3Qgb2YgdGhlIGV4YW1wbGVzIHByZXNlbnRlZCBpbiB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBCb29zdC5EZXRhaWwvTGlnaHR3ZWlnaHRUZXN0ICg9Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPSkgbWFjcm8gYEJPT1NUX1RFU1RgIGlzIHVzZWQgdG8gY2hlY2sgY29ycmVjdG5lc3MgY29uZGl0aW9ucyAoY29uY2VwdHVhbGx5IHNpbWlsYXIgdG8gYGFzc2VydGApLgorQSBmYWlsdXJlIG9mIHRoZSBjaGVja2VkIGNvbmRpdGlvbiBkb2VzIG5vdCBhYm9ydCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBpdCB3aWxsIGluc3RlYWQgbWFrZSBgYm9vc3Q6OnJlcG9ydF9lcnJvcnNgIHJldHVybiBhIG5vbi16ZXJvIHByb2dyYW0gZXhpdCBjb2RlLgorVXNpbmcgQm9vc3QuRGV0YWlsL0xpZ2h0d2VpZ2h0VGVzdCBhbGxvd3MgdG8gYWRkIHRoZSBleGFtcGxlcyB0byB0aGUgbGlicmFyeSByZWdyZXNzaW9uIHRlc3RzIHNvIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYWx3YXlzIGNvbXBpbGUgYW5kIHJ1biBjb3JyZWN0bHkuCitdCisKK1tpZGVudGl0eV9jYWxsc10KKworSXQgaXMgcG9zc2libGUgdG8gdXNlIHRoaXMgbGlicmFyeSB0byBjcmVhdGUgYSBzaW5nbGUgW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Z1bmN0aW9uX292ZXJsb2FkaW5nIG92ZXJsb2FkZWRdIGZ1bmN0aW9uIG9iamVjdCAob3IgW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Z1bmN0b3IgZnVuY3Rvcl0pIG5hbWVkIGBpZGVudGl0eWAgdGhhdCBhZ2dyZWdhdGVzIHRvZ2V0aGVyIHRoZSBjYWxscyB0byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIChzZWUgYWxzbyBbQC4uLy4uL3Rlc3QvZnVuY3Rvci5jcHAgPWZ1bmN0b3IuY3BwPV0gYW5kIFtALi4vLi4vdGVzdC9pZGVudGl0eS5ocHAgPWlkZW50aXR5LmhwcD1dKToKKworW2lkZW50aXR5X2Z1bmN0b3JdCisKK05vdGUgaG93IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB2aWEgYSBzaW5nbGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgYGlkZW50aXR5YCBpbnN0ZWFkIG9mIHVzaW5nIHRoZWlyIGRpZmZlcmVudCBuYW1lcyBgaWRlbnRpdHlfc2AsIGBpZGVudGl0eV9pYCwgYW5kIGBpZGVudGl0eV9kYC4KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uIEdldHRpbmcgU3RhcnRlZF0KKworVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byBzZXR1cCBhIHN5c3RlbSB0byB1c2UgdGhpcyBsaWJyYXJ5LgorCitbc2VjdGlvbiBDb21waWxlcnMgYW5kIFBsYXRmb3Jtc10KKworVGhlIGF1dGhvcnMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYW5kIHRlc3RlZCB0aGlzIGxpYnJhcnkgb246CisKKyMgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykgQysrIDQuNS4zICh3aXRoIGFuZCB3aXRob3V0IEMrKzExIGZlYXR1cmVzIGVuYWJsZWQgYC1zdGQ9YysrMHhgKSBvbiBDeWd3aW4uCisjIE1pc2Nyb3NvZnQgVmlzdWFsIEMrKyAoTVNWQykgOC4wIG9uIFdpbmRvd3MgNy4KKworU2VlIHRoZSBsaWJyYXJ5IFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZGV2ZWxvcG1lbnQvdGVzdHMvcmVsZWFzZS9kZXZlbG9wZXIvZnVuY3Rpb25hbC1vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwgcmVncmVzc2lvbnMgdGVzdCByZXN1bHRzXSBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGNvbXBpbGVycyBhbmQgcGxhdGZvcm1zLgorQ2hlY2sgdGhlIGxpYnJhcnkgcmVncmVzc2lvbiB0ZXN0IFtALi4vLi4vdGVzdC9KYW1maWxlLnYyID1KYW1maWxlLnYyPV0gZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gdGhhdCBtaWdodCBiZSByZXF1aXJlZCBmb3IgYSBzcGVjaWZpYyBjb21waWxlci4KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uIEluc3RhbGxhdGlvbl0KKworVGhpcyBsaWJyYXJ5IGlzIGNvbXBvc2VkIG9mIGhlYWRlciBmaWxlcyBvbmx5LgorVGhlcmVmb3JlIHRoZXJlIGlzIG5vIHByZS1jb21waWxlZCBvYmplY3QgZmlsZSB3aGljaCBuZWVkcyB0byBiZSBpbnN0YWxsZWQuCitQcm9ncmFtbWVycyBjYW4gc2ltcGx5IGluc3RydWN0IHRoZSBjb21waWxlciB3aGVyZSB0byBmaW5kIHRoZSBsaWJyYXJ5IGhlYWRlciBmaWxlcyAoYC1JYCBvcHRpb24gb24gR0NDLCBgL0lgIG9wdGlvbiBvbiBNU1ZDLCBldGMpIGFuZCBjb21waWxlIGNvZGUgdXNpbmcgdGhlIGxpYnJhcnkuCisKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gb3ZlcmxvYWQgaXMgZ2l2ZW4gYnkgdGhlIFttYWNyb3JlZiBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWF0gY29uZmlndXJhdGlvbiBtYWNyby4KK1RoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZSBpcyBnaXZlbiBieSB0aGUgW21hY3JvcmVmIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYXSBjb25maWd1cmF0aW9uIG1hY3JvLgorQWxsIGNvbmZpZ3VyYXRpb24gbWFjcm9zIGhhdmUgYXBwcm9wcmlhdGUgZGVmYXVsdCB2YWx1ZXMgd2hlbiB0aGV5IGFyZSBsZWZ0IHVuZGVmaW5lZC4KKworW2VuZHNlY3RdCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbiBUdXRvcmlhbF0KKworVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byB1c2UgdGhpcyBsaWJyYXJ5LgorCitbc2VjdGlvbiBPdmVybG9hZGluZ10KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkaXN0aW5jdCBzaWduYXR1cmVzOgorCitbaWRlbnRpdHlfZGVjbHNdCisKK1RoaXMgbGlicmFyeSBoZWFkZXIgW2hlYWRlcnJlZiBib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwXSBwcm92aWRlcyBhIFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0gY2xhc3MgdGVtcGxhdGUgdGhhdCBjcmVhdGVzIGEgc2luZ2xlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzZXBhcmF0ZSBmdW5jdGlvbiBuYW1lcyAoc2VlIGFsc28gW0AuLi8uLi90ZXN0L2Z1bmN0b3IuY3BwID1mdW5jdG9yLmNwcD1dIGFuZCBbQC4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwID1pZGVudGl0eS5ocHA9XSk6CisKK1tpZGVudGl0eV9mdW5jdG9yXQorCitOb3RlIGhvdyBlYWNoIGZ1bmN0aW9uIHR5cGUgaXMgcGFzc2VkIGFzIGEgdGVtcGxhdGUgcGFyYW1ldGVyIG9mIFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0gdXNpbmcgdGhlIGZvbGxvd2luZyBzeW50YXggKHRoaXMgaXMgX19Cb29zdF9GdW5jdGlvbl9fJ3MgcHJlZmVycmVkIHN5bnRheCk6CisKKyAgICBgYC9yZXN1bHQtdHlwZS9gYCAoYGAvYXJndW1lbnQxLXR5cGUvYGAsIGBgL2FyZ3VtZW50Mi10eXBlL2BgLCAuLi4pCisKK1RoZW4gdGhlIHJlbGF0aXZlIGZ1bmN0aW9uIHBvaW50ZXJzLCBmdW5jdGlvbiByZWZlcmVuY2VzLCBvciBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG9seW1vcnBoaXNtXyhjb21wdXRlcl9zY2llbmNlKSBtb25vbW9ycGhpYyBmdW5jdGlvbl0gb2JqZWN0cyBhcmUgcGFzc2VkIHRvIHRoZSBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dIGNvbnN0cnVjdG9yIG1hdGNoaW5nIHRoZSBvcmRlciBvZiB0aGUgc3BlY2lmaWVkIHRlbXBsYXRlIHBhcmFtZXRlcnMuCitbZm9vdG5vdGUKK0Z1bmN0aW9uIHBvaW50ZXJzIGFyZSBvZiB0aGUgZm9ybSBbXlsncmVzdWx0LXR5cGUgXV1gKCopKGBbXlsnYXJndW1lbnQxLXR5cGVdXWAsIC4uLilgICh0aGUgQysrIGNvbXBpbGVyIGlzIHVzdWFsbHkgYWJsZSB0byBhdXRvbWF0aWNhbGx5IHByb21vdGUgYSBmdW5jdGlvbiBuYW1lIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBhIGNvbnRleHQgd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGlzIGV4cGVjdGVkIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IHByZWZpeGVkIGJ5IGAmYCkuCitGdW5jdGlvbiByZWZlcmVuY2VzIGFyZSBvZiB0aGUgZm9ybSBbXlsncmVzdWx0LXR5cGUgXV1gKCYpKGBbXlsnYXJndW1lbnQxLXR5cGVdXWAsIC4uLilgLgorRnVuY3Rpb24gdHlwZXMgYXJlIG9mIHRoZSBmb3JtIFteWydyZXN1bHQtdHlwZSBdXWAoYFteWydhcmd1bWVudDEtdHlwZV1dYCwgLi4uKWAgKG5vdGUgaG93IHRoZXkgbGFjayBvZiBib3RoIGAqYCBhbmQgYCZgIHdoZW4gY29tcGFyZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMpLgorRmluYWxseSwgbW9ub21vcnBoaWMgZnVuY3Rpb24gb2JqZWN0cyBhcmUgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBhIG5vbi10ZW1wbGF0ZSBjYWxsIG9wZXJhdG9yIG9mIHRoZSBmb3JtIFteWydyZXN1bHQtdHlwZSBdXWBvcGVyYXRvcigpKGBbXlsnYXJndW1lbnQxLXR5cGVdXWAsIC4uLilgLgorVW5mb3J0dW5hdGVseSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHN1cHBvcnQgcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0cyAoc2VlIFtAaHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9BcmNoaXZlcy9ib29zdC8yMDEyLzAzLzE5MTc0NC5waHBdKS4KK10KK0luIHRoZSBhYm92ZSBleGFtcGxlLCBgaWRlbnRpdHlfc2AgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciAodGhlIGZ1bmN0aW9uIGFkZHJlc3MgaXMgYXV0b21hdGljYWxseSB0YWtlbiBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lIGJ5IHRoZSBjb21waWxlciksIGBpZGVudGl0eV9pYCBhcyBhIGZ1bmN0aW9uIHJlZmVyZW5jZSwgYW5kIGBpZGVudGl0eV9kYCBhcyBhIGZ1bmN0aW9uIG9iamVjdC4KKworQWxsIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlcyBtdXN0IGhhdmUgZGlzdGluY3QgcGFyYW1ldGVycyBmcm9tIG9uZSBhbm90aGVyIChzbyB0aGUgb3ZlcmxvYWRlZCBjYWxscyBjYW4gYmUgcmVzb2x2ZWQgYnkgdGhpcyBsaWJyYXJ5KS4KK1tmb290bm90ZQorTm90ZSB0aGF0IGluIEMrKyB0aGUgZnVuY3Rpb24gcmVzdWx0IHR5cGUgaXMgbm90IHVzZWQgZm9yIG92ZXJsb2FkIHJlc29sdXRpb24gKHRvIGF2b2lkIG1ha2luZyB0aGUgb3ZlcmxvYWQgcmVzb2x1dGlvbiBjb250ZXh0IGRlcGVuZGVudCkuCitUaGVyZWZvcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycyBtdXN0IGJlIGRpc3RpbmN0IGZvciBlYWNoIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlLgorXQorSW4gb3JkZXIgdG8gY3JlYXRlIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyBuZWNlc3NhcnkgdG8gc3BlY2lmeSBhdCBsZWFzdCB0d28gZnVuY3Rpb24gdHlwZXMgKGJlY2F1c2UgdGhlcmUgaXMgbm90aGluZyB0byBvdmVybG9hZCBiZXR3ZWVuIG9uZSBvciB6ZXJvIGZ1bmN0aW9ucykuCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbiBXaXRob3V0IEZ1bmN0aW9uIFR5cGVzXQorCitGb3IgY29udmVuaWVuY2UsIHRoaXMgbGlicmFyeSBhbHNvIHByb3ZpZGVzIHRoZSBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXSBmdW5jdGlvbiB0ZW1wbGF0ZSB3aGljaCBhbGxvd3MgdG8gY3JlYXRlIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCB3aXRob3V0IGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24gdHlwZXMuCitUaGUgZnVuY3Rpb24gdHlwZXMgYXJlIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBmcm9tIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGUgYXBwcm9wcmlhdGUgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXSBpbnN0YW50aWF0aW9uIGlzIHJldHVybmVkIGJ5IFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dLgorCitUaGUgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0gZnVuY3Rpb24gdGVtcGxhdGUgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzZWQgdG9nZXRoZXIgd2l0aCBfX0Jvb3N0X1R5cGVvZl9fJ3MgYEJPT1NUX0FVVE9gIChvciBDKysxMSBgYXV0b2ApLgorRm9yIGV4YW1wbGUgKHNlZSBhbHNvIFtALi4vLi4vdGVzdC9tYWtlX2RlY2wuY3BwID1tYWtlX2RlY2wuY3BwPV0gYW5kIFtALi4vLi4vdGVzdC9pZGVudGl0eS5ocHAgPWlkZW50aXR5LmhwcD1dKToKKworW2lkZW50aXR5X21ha2VfZGVjbF0KKworTm90ZSBob3cgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IGBpZGVudGl0eWAgaGFzIGJlZW4gY3JlYXRlZCBzcGVjaWZ5aW5nIG9ubHkgdGhlIGZ1bmN0aW9ucyBgaWRlbnRpdHlfc2AsIGBpZGVudGl0eV9pYCwgYGlkZW50aXR5X2RgIGFuZCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uIHR5cGVzIGBjb25zdCBzdGQ6OnN0cmluZyYgKGNvbnN0IHN0ZDo6c3RyaW5nJilgLCBgaW50IChpbnQpYCwgYW5kIGBkb3VibGUgKGRvdWJsZSlgIGFzIHJlcXVpcmVkIGluc3RlYWQgYnkgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXS4KK1RoZXJlZm9yZSwgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0gcHJvdmlkZXMgYSBtb3JlIGNvbmNpc2Ugc3ludGF4IGluIHRoaXMgY29udGV4dCB3aGVuIGNvbXBhcmVkIHdpdGggW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXS4KKworQW5vdGhlciBjYXNlIHdoZXJlIFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dIGNhbiBiZSB1c2VmdWwgaXMgd2hlbiB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgaXMgcGFzc2VkIHRvIGEgZnVuY3Rpb24gdGVtcGxhdGUgd2hpY2ggY2FuIGhvbGQgdGhlIHNwZWNpZmljIFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0gdHlwZSB1c2luZyBhIHRlbXBsYXRlIHBhcmFtZXRlci4KK0ZvciBleGFtcGxlIChzZWUgYWxzbyBbQC4uLy4uL3Rlc3QvbWFrZV9jYWxsLmNwcCA9bWFrZV9jYWxsLmNwcD1dIGFuZCBbQC4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwID1pZGVudGl0eS5ocHA9XSk6CisKK1tpZGVudGl0eV9tYWtlX2NoZWNrc10KK1tpZGVudGl0eV9tYWtlX2NhbGxdCisKK1RoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIG9mIFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dIHVzZXMgX19Cb29zdF9UeXBlb2ZfXyB0byBhdXRvbWF0aWNhbGx5IGRlZHVjZSBzb21lIG9mIHRoZSBmdW5jdGlvbiB0eXBlcy4KK0luIG9yZGVyIHRvIGNvbXBpbGUgY29kZSBpbiBfX0Jvb3N0X1R5cGVvZl9fIGVtdWxhdGlvbiBtb2RlLCBhbGwgdHlwZXMgc2hvdWxkIGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgdXNpbmcgYEJPT1NUX1RZUEVPRl9SRUdJU1RFUl9UWVBFYCBhbmQgYEJPT1NUX1RZUEVPRl9SRUdJU1RFUl9URU1QTEFURWAsIG9yIGFwcHJvcHJpYXRlIF9fQm9vc3RfVHlwZW9mX18gaGVhZGVycyBzaG91bGQgYmUgaW5jbHVkZWQgKHNlZSBfX0Jvb3N0X1R5cGVvZl9fIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KK0ZvciB0aGUgYWJvdmUgZXhhbXBsZXMsIGl0IGlzIHN1ZmZpY2llbnQgdG8gaW5jbHVkZSB0aGUgX19Cb29zdF9UeXBlb2ZfXyBoZWFkZXIgdGhhdCByZWdpc3RlcnMgYHN0ZDo6c3RyaW5nYCAodGhpcyBsaWJyYXJ5IGRvZXMgbm90IHJlcXVpcmUgdG8gcmVnaXN0ZXIgYGJvb3N0OjpmdW5jdGlvbmAgZm9yIF9fQm9vc3RfVHlwZW9mX18gZW11bGF0aW9uKToKKworW2lkZW50aXR5X3R5cGVvZl0KKworW2VuZHNlY3RdCisKK1tlbmRzZWN0XQorCitbeGluY2x1ZGUgcmVmZXJlbmNlLnhtbF0KKworW3NlY3Rpb24gQWNrbm93bGVkZ21lbnRzXQorCitNYW55IHRoYW5rcyB0byBNYXRoaWFzIEdhdW5hcmQgZm9yIHN1Z2dlc3RpbmcgdG8gaW1wbGVtZW50IFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0gYW5kIGZvciBzb21lIHNhbXBsZSBjb2RlLgorCitUaGFua3MgdG8gSm9obiBCeXRoZXdheSBmb3Igc3VnZ2VzdGluZyB0byBpbXBsZW1lbnQgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0uCisKK1RoYW5rcyB0byBOYXRoYW4gUmlkZ2UgZm9yIHN1Z2dlc3Rpb25zIG9uIGhvdyB0byBpbXBsZW1lbnQgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0uCisKK1RoYW5rcyB0byBSb2JlcnQgU3Rld2FydCBmb3IgY29tbWVudGluZyBvbiB0aGUgbGlicmFyeSBuYW1lLgorCitNYW55IHRoYW5rcyB0byB0aGUgZW50aXJlIF9fQm9vc3RfXyBjb21tdW5pdHkgYW5kIG1haWxpbmcgbGlzdCBmb3IgcHJvdmlkaW5nIHZhbHVhYmxlIGNvbW1lbnRzIGFib3V0IHRoaXMgbGlicmFyeSBhbmQgZ3JlYXQgaW5zaWdodHMgb24gdGhlIEMrKyBwcm9ncmFtbWluZyBsYW5ndWFnZS4KKworW2VuZHNlY3RdCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYjMzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD1kb2MvaHRtbC9pbmRleC5odG1sIj4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gZmFpbGVkLCBjbGljayB0aGlzIAorICAgIDxhIGhyZWY9ImRvYy9odG1sL2luZGV4Lmh0bWwiPmxpbms8L2E+ICZuYnNwOzxocj4KKyAgICA8cD6pIENvcHlyaWdodCBMb3JlbnpvIENhbWluaXRpLCAyMDA5LTIwMTI8L3A+CisgICAgPHA+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgCisgICAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij4KKyAgICBMSUNFTlNFXzFfMC50eHQ8L2E+IG9yIGEgY29weSBhdAorICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvcD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9KYW1maWxlLnYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzFlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIKQEAgLTAsMCArMSwxNiBAQAorCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIExvcmVuem8gQ2FtaW5pdGkKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCisjIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAorIyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisjIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KKworaW1wb3J0IHRlc3RpbmcgOworCisjIFN1biBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGRldGVjdCB0eXBlLW9mIGVtdWxhdGlvbiAoZm9yY2UgaXQpLgorcHJvamVjdCA6IHJlcXVpcmVtZW50cyA8dG9vbHNldD5zdW46PGRlZmluZT5CT09TVF9UWVBFT0ZfRU1VTEFUSU9OIDsKKworcnVuIGZ1bmN0b3IuY3BwIDsKK3J1biBtYWtlX2RlY2wuY3BwIDsKK3J1biBtYWtlX2NhbGwuY3BwIDsKKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9mdW5jdG9yLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvZnVuY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4ZDk3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvZnVuY3Rvci5jcHAKQEAgLTAsMCArMSwzNCBAQAorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKKy8vIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLy8gSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgorCisjaW5jbHVkZSAiaWRlbnRpdHkuaHBwIgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCitpbnQgbWFpbigpIHsKKyAgICAvL1tpZGVudGl0eV9jYWxscworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHlfcygiYWJjIikgPT0gImFiYyIpOworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHlfaSgxMjMpID09IDEyMyk7CisgICAgQk9PU1RfVEVTVChpZGVudGl0eV9kKDEuMjMpID09IDEuMjMpOworICAgIC8vXQorCisgICAgLy9baWRlbnRpdHlfZnVuY3RvcgorICAgIG5kbmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPAorICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAoY29uc3Qgc3RkOjpzdHJpbmcmKQorICAgICAgICAsIGludCAoaW50KQorICAgICAgICAsIGRvdWJsZSAoZG91YmxlKQorICAgID4gaWRlbnRpdHkoaWRlbnRpdHlfcywgaWRlbnRpdHlfaSwgaWRlbnRpdHlfZCk7CisKKyAgICAvLyBBbGwgY2FsbHMgdmlhIHNpbmdsZSBgaWRlbnRpdHlgIGZ1bmN0aW9uLgorICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoImFiYyIpID09ICJhYmMiKTsKKyAgICBCT09TVF9URVNUKGlkZW50aXR5KDEyMykgPT0gMTIzKTsKKyAgICBCT09TVF9URVNUKGlkZW50aXR5KDEuMjMpID09IDEuMjMpOworICAgIC8vXQorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvaWRlbnRpdHkuaHBwIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9pZGVudGl0eS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjNWEyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvaWRlbnRpdHkuaHBwCkBAIC0wLDAgKzEsMjkgQEAKKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCisvLyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKKy8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKy8vIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KKworI2lmbmRlZiBJREVOVElUWV9IUFBfCisjZGVmaW5lIElERU5USVRZX0hQUF8KKworLy9baWRlbnRpdHlfdHlwZW9mCisjaW5jbHVkZSA8Ym9vc3QvdHlwZW9mL3N0ZC9zdHJpbmcuaHBwPiAvLyBObyBuZWVkIHRvIHJlZ2lzdGVyIGBuZG5ib29zdDo6ZnVuY3Rpb25gLgorLy9dCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPHN0cmluZz4KKworLy9baWRlbnRpdHlfZGVjbHMKK2NvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGl0eV9zKGNvbnN0IHN0ZDo6c3RyaW5nJiB4KSAvLyBGdW5jdGlvbiAoYXMgcG9pbnRlcikuCisgICAgeyByZXR1cm4geDsgfQorCitpbnQgaWRlbnRpdHlfaV9pbXBsKGludCB4KSB7IHJldHVybiB4OyB9CitpbnQgKCZpZGVudGl0eV9pKShpbnQpID0gaWRlbnRpdHlfaV9pbXBsOyAvLyBGdW5jdGlvbiByZWZlcmVuY2UuCisKK2RvdWJsZSBpZGVudGl0eV9kX2ltcGwoZG91YmxlIHgpIHsgcmV0dXJuIHg7IH0KK25kbmJvb3N0OjpmdW5jdGlvbjxkb3VibGUgKGRvdWJsZSk+IGlkZW50aXR5X2QgPSBpZGVudGl0eV9kX2ltcGw7IC8vIEZ1bmN0b3IuCisvL10KKworI2VuZGlmIC8vICNpbmNsdWRlIGd1YXJkCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvbWFrZV9jYWxsLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvbWFrZV9jYWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzU1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2NhbGwuY3BwCkBAIC0wLDAgKzEsMjcgQEAKKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCisvLyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKKy8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKy8vIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24KKworI2luY2x1ZGUgImlkZW50aXR5LmhwcCIKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworLy9baWRlbnRpdHlfbWFrZV9jaGVja3MKK3RlbXBsYXRlPHR5cGVuYW1lIEY+Cit2b2lkIGNoZWNrKEYgaWRlbnRpdHkpIHsKKyAgICBCT09TVF9URVNUKGlkZW50aXR5KCJhYmMiKSA9PSAiYWJjIik7CisgICAgQk9PU1RfVEVTVChpZGVudGl0eSgxMjMpID09IDEyMyk7CisgICAgQk9PU1RfVEVTVChpZGVudGl0eSgxLjIzKSA9PSAxLjIzKTsKK30KKy8vXQorCitpbnQgbWFpbigpIHsKKyAgICAvL1tpZGVudGl0eV9tYWtlX2NhbGwKKyAgICBjaGVjayhuZG5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uKGlkZW50aXR5X3MsIGlkZW50aXR5X2ksIGlkZW50aXR5X2QpKTsKKyAgICAvL10KKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2RlY2wuY3BwIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2RlY2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjgzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L21ha2VfZGVjbC5jcHAKQEAgLTAsMCArMSwyNCBAQAorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKKy8vIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLy8gSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgorCisjaW5jbHVkZSAiaWRlbnRpdHkuaHBwIgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvdHlwZW9mL3R5cGVvZi5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCitpbnQgbWFpbigpIHsKKyAgICAvL1tpZGVudGl0eV9tYWtlX2RlY2wKKyAgICBCT09TVF9BVVRPKGlkZW50aXR5LCBuZG5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uKAorICAgICAgICAgICAgaWRlbnRpdHlfcywgaWRlbnRpdHlfaSwgaWRlbnRpdHlfZCkpOworCisgICAgQk9PU1RfVEVTVChpZGVudGl0eSgiYWJjIikgPT0gImFiYyIpOworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoMTIzKSA9PSAxMjMpOworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoMS4yMykgPT0gMS4yMyk7CisgICAgLy9dCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9wdHJfZnVuLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvcHRyX2Z1bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzYyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvcHRyX2Z1bi5odG1sCkBAIC0wLDAgKzEsMTU4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CisKKyAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KKyAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+RnVuY3Rpb24gUG9pbnRlciBBZGFwdGVyczwvaDE+CisKKyAgPHA+VGhlIGhlYWRlciA8YSBocmVmPSIuLi8uLi9ib29zdC9mdW5jdGlvbmFsLmhwcCI+ZnVuY3Rpb25hbC5ocHA8L2E+CisgIHByb3ZpZGVzIGVuaGFuY2VkIHZlcnNpb25zIG9mIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYWRhcHRlcnMgZnJvbSB0aGUKKyAgQysrIFN0YW5kYXJkIExpYnJhcnkgKCZzZWN0OzIwLjMuNyk6PC9wPgorCisgIDx1bD4KKyAgICA8bGk+PHR0PnBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PnBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPkFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVscGVyIGZ1bmN0aW9uIHRlbXBsYXRlOjwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD5wdHJfZnVuPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPkhvd2V2ZXIsIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gdXNlIHRoZSBhZGFwdGVycyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICBhZGFwdGVycyBpbiB0aGlzIGxpYnJhcnkgZHVlIHRvIG91ciB1c2Ugb2YgPGEgaHJlZj0KKyAgImZ1bmN0aW9uX3RyYWl0cy5odG1sIj5mdW5jdGlvbiBvYmplY3QgdHJhaXRzPC9hPi4gWW91IHdpbGwgaG93ZXZlciBuZWVkIHRvCisgIHVzZSB0aGVtIGlmIHlvdXIgaW1wbGVtZW50YXRpb24gZmFpbHMgdG8gd29yayBwcm9wZXJseSB3aXRoIG91ciB0cmFpdHMKKyAgY2xhc3NlcyAoZHVlIHRvIGxhY2sgaWYgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiksIG9yIGlmIHlvdSB3aXNoIHRvIHVzZSBhCisgIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVyIGZyb20gYSB0aGlyZCBwYXJ0eS48L3A+CisKKyAgPGgzPlVzYWdlPC9oMz4KKworICA8cD5JZiB5b3UgbmVlZCB0byB1c2UgdGhlc2UgYWRhcHRlcnMsIHVzYWdlIGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQKKyAgZnVuY3Rpb24gcG9pbnRlciBhZGFwdGVycy4gRm9yIGV4YW1wbGUsPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Citib29sIGJhZChzdGQ6OnN0cmluZyBmb28pIHsgLi4uIH0KKy4uLgorc3RkOjp2ZWN0b3ImbHQ7c3RkOjpzdHJpbmcmZ3Q7IGM7CisuLi4KK3N0ZDo6dmVjdG9yJmx0O3N0ZDo6c3RyaW5nJmd0Ozo6aXRlcmF0b3IgaXQKKyAgICAgPSBzdGQ6OmZpbmRfaWYoYy5iZWdpbigpLCBjLmVuZCgpLCBzdGQ6Om5vdDEoYm9vc3Q6OnB0cl9mdW4oYmFkKSkpOworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5Ob3RlIGhvd2V2ZXIgdGhhdCB0aGlzIGxpYnJhcnkgY29udGFpbnMgZW5oYW5jZWQgPGEgaHJlZj0KKyAgIm5lZ2F0b3JzLmh0bWwiPm5lZ2F0b3JzPC9hPiB0aGF0IHN1cHBvcnQgZnVuY3Rpb24gb2JqZWN0IHRyYWl0cywgc28gdGhlCisgIGxpbmUgYWJvdmUgY291bGQgZXF1YWxseSBiZSB3cml0dGVuPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+CitzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDs6Oml0ZXJhdG9yIGl0CisgICAgID0gc3RkOjpmaW5kX2lmKGMuYmVnaW4oKSwgYy5lbmQoKSwgYm9vc3Q6Om5vdDEoYmFkKSk7Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxoMz5Bcmd1bWVudCBUeXBlczwvaDM+CisKKyAgPHA+VGhlIHN0YW5kYXJkIGRlZmluZXMgPHR0PnBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248L3R0PiBsaWtlIHRoaXMKKyAgKCZzZWN0OzIwLjMuOCZuYnNwOyZwYXJhOzIpOjwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordGVtcGxhdGUgJmx0O2NsYXNzIEFyZywgY2xhc3MgUmVzdWx0Jmd0OworY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbiZsdDtBcmcsIFJlc3VsdCZndDsgeworcHVibGljOgorICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKFJlc3VsdCAoKiBmKSg8c3Ryb25nPkFyZzwvc3Ryb25nPikpOworICBSZXN1bHQgb3BlcmF0b3IoKSg8c3Ryb25nPkFyZzwvc3Ryb25nPiB4KSBjb25zdDsKK307Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPk5vdGUgdGhhdCB0aGUgYXJndW1lbnQgdG8gPHR0Pm9wZXJhdG9yKCk8L3R0PiBpcyBleGFjdGx5IHRoZSBzYW1lIHR5cGUKKyAgYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLiBJZiB0aGlzIGlzIGEgdmFsdWUgdHlwZSwgdGhlCisgIGFyZ3VtZW50IHdpbGwgYmUgcGFzc2VkIGJ5IHZhbHVlIGFuZCBjb3BpZWQgdHdpY2UuCisgIDx0dD5wb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjwvdHQ+IGhhcyBhIHNpbWlsYXIgcHJvYmxlbS48L3A+CisKKyAgPHA+SG93ZXZlciwgaWYgd2Ugd2VyZSB0byB0cnkgYW5kIGVsaW1pbmF0ZSB0aGlzIGluZWZmaWNpZW5jeSBieSBpbnN0ZWFkCisgIGRlY2xhcmluZyB0aGUgYXJndW1lbnQgYXMgPHR0PmNvbnN0Jm5ic3A7QXJnJmFtcDs8L3R0PiwgdGhlbiBpZiBBcmcgd2VyZSBhCisgIHJlZmVyZW5jZSB0eXBlLCB3ZSB3b3VsZCBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgcmVmZXJlbmNlLCB3aGljaCBpcworICBjdXJyZW50bHkgaWxsZWdhbCAoYnV0IHNlZSA8YSBocmVmPQorICAiaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMxMDYiPkMrKyBjb3JlCisgIGxhbmd1YWdlIGlzc3VlIG51bWJlciAxMDYpPC9hPjwvcD4KKworICA8cD5TbyB0aGUgd2F5IGluIHdoaWNoIHdlIHdhbnQgdG8gZGVjbGFyZSB0aGUgYXJndW1lbnQgZm9yCisgIDx0dD5vcGVyYXRvcigpPC90dD4gZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgd3JhcHBlZCBmdW5jdGlvbidzCisgIGFyZ3VtZW50IGlzIGEgcmVmZXJlbmNlLiBJZiBpdCBpcyBhIHJlZmVyZW5jZSwgd2Ugd2FudCB0byBkZWNsYXJlIGl0IHNpbXBseQorICBhcyA8dHQ+QXJnPC90dD47IGlmIGl0IGlzIGEgdmFsdWUgd2Ugd2FudCB0byBkZWNsYXJlIGl0IGFzCisgIDx0dD5jb25zdCZuYnNwO0FyZyZhbXA7PC90dD4uPC9wPgorCisgIDxwPlRoZSBCb29zdCA8YSBocmVmPSIuLi91dGlsaXR5L2NhbGxfdHJhaXRzLmh0bSI+Y2FsbF90cmFpdHM8L2E+IGNsYXNzCisgIHRlbXBsYXRlIGNvbnRhaW5zIGEgPHR0PnBhcmFtX3R5cGU8L3R0PiB0eXBlZGVmLCB3aGljaCB1c2VzIHBhcnRpYWwKKyAgc3BlY2lhbGlzYXRpb24gdG8gbWFrZSBwcmVjaXNlbHkgdGhpcyBkZWNpc2lvbi4gQnkgZGVjbGFyaW5nIHRoZQorICA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGFzPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+CitSZXN1bHQgb3BlcmF0b3IoKSh0eXBlbmFtZSBjYWxsX3RyYWl0cyZsdDtBcmcmZ3Q7OjpwYXJhbV90eXBlIHgpIGNvbnN0Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPndlIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0IC0gd2UgaW1wcm92ZSBlZmZpY2llbmN5IHdpdGhvdXQgZ2VuZXJhdGluZworICByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMuPC9wPgorCisgIDxoMz5MaW1pdGF0aW9uczwvaDM+CisKKyAgPHA+VGhlIGNhbGwgdHJhaXRzIHRlbXBsYXRlIHVzZWQgdG8gcmVhbGlzZSB0aGlzIGltcHJvdmVtZW50IHJlbGllcyBvbgorICBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uLCBzbyB0aGlzIGltcHJvdmVtZW50IGlzIG9ubHkgYXZhaWxhYmxlIG9uIGNvbXBpbGVycworICB0aGF0IHN1cHBvcnQgdGhhdCBmZWF0dXJlLiBXaXRoIG90aGVyIGNvbXBpbGVycywgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUKKyAgZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSwgdGh1cyBnZW5lcmF0aW5nIHRoZQorICBwb3NzaWJpbGl0eSBvZiByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMuPC9wPgorICA8aHI+CisKKyAgPHA+PGEgaHJlZj0iaHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPXJlZmVyZXIiPjxpbWcgYm9yZGVyPSIwIiBzcmM9CisgICIuLi8uLi9kb2MvaW1hZ2VzL3ZhbGlkLWh0bWw0MDEucG5nIiBhbHQ9IlZhbGlkIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwiCisgIGhlaWdodD0iMzEiIHdpZHRoPSI4OCI+PC9hPjwvcD4KKworICA8cD5SZXZpc2VkIAorICA8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBzLXR5cGU9IkVESVRFRCIgcy1mb3JtYXQ9IiVkICVCLCAlWSIgc3RhcnRzcGFuIC0tPjAyCisgIERlY2VtYmVyLCAyMDA2PCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgZW5kc3BhbiBpLWNoZWNrc3VtPSIzODUxMCIgLS0+PC9wPgorCisgIDxwPjxpPkNvcHlyaWdodCAmY29weTsgMjAwMCBDYWRlbnphIE5ldyBaZWFsYW5kIEx0ZC48L2k+PC9wPgorCisgIDxwPjxpPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQorICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKKyAgY29weSBhdCA8YSBocmVmPQorICAiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvaT48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvc3VibGlicyBiL2xpYnMvZnVuY3Rpb25hbC9zdWJsaWJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvc3VibGlicwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL3Rlc3QvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC90ZXN0L0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlMzc5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC90ZXN0L0phbWZpbGUudjIKQEAgLTAsMCArMSw5IEBACisjfiBDb3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOAorI34gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorI34gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKK2ltcG9ydCB0ZXN0aW5nIDsKKwordGVzdC1zdWl0ZSBmdW5jdGlvbmFsIDoKKyAgICBbIHJ1biBmdW5jdGlvbl90ZXN0LmNwcCBdCisgICAgOwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvdGVzdC9mdW5jdGlvbl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjYzYmVhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL3Rlc3QvZnVuY3Rpb25fdGVzdC5jcHAKQEAgLTAsMCArMSwzMzQgQEAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29weXJpZ2h0IChjKSAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55LQorLy8gaW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUZXN0cyBmb3IgdGhlIEJvb3N0IGZ1bmN0aW9uYWwuaHBwIGhlYWRlciBmaWxlCisvLworLy8gTm90ZSB0aGF0IGZ1bmN0aW9uYWwuaHBwIHJlbGllcyBvbiBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uIHRvIGJlCisvLyBlZmZlY3RpdmUuICBJZiB5b3VyIGNvbXBpbGVyIGxhY2tzIHRoaXMgZmVhdHVyZSwgdmVyeSBmZXcgb2YgdGhlCisvLyB0ZXN0cyB3b3VsZCBjb21waWxlLCBhbmQgc28gaGF2ZSBiZWVuIGV4Y2x1ZGVkIGZyb20gdGhlIHRlc3QuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICRJZDogZnVuY3Rpb25fdGVzdC5jcHAgNTA0NTYgMjAwOS0wMS0wNCAwNToxNzowMlogYmd1YmVua28gJAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAkTG9nJAorLy8gUmV2aXNpb24gMS4zICAyMDA2LzEyLzAyIDEzOjU3OjMyICBhbmRyZWFzX2h1YmVyNjkKKy8vIEZpeGVkIGxpY2Vuc2UgJiBjb3B5cmlnaHQgaXNzdWVzLgorLy8KKy8vIEZyb20gTWFyayBSb2RnZXJzIEZyaSBEZWMgMSAxMjo1OToxNCAyMDA2CisvLyBYLUFwcGFyZW50bHktVG86IGFoZDY5NzQtYm9vc3RvcmcgLWF0LSB5YWhvby5jb20gdmlhIDY4LjE0Mi4yMDYuMTYwOyBGcmksIDAxIERlYyAyMDA2IDEyOjU5OjQxIC0wODAwCisvLyBYLU9yaWdpbmF0aW5nLUlQOiBbMTk1LjExMi40LjU0XQorLy8gUmV0dXJuLVBhdGg6IDxtYXJrLnJvZGdlcnMgLWF0LSBjYWRlbnphLmNvLm56PgorLy8gQXV0aGVudGljYXRpb24tUmVzdWx0czogbXRhNTUwLm1haWwubXVkLnlhaG9vLmNvbSBmcm9tPWNhZGVuemEuY28ubno7IGRvbWFpbmtleXM9bmV1dHJhbCAobm8gc2lnKQorLy8gUmVjZWl2ZWQ6IGZyb20gMTk1LjExMi40LjU0IChFSExPIHNtdHAubmlsZHJhbS5jby51aykgKDE5NS4xMTIuNC41NCkgYnkgbXRhNTUwLm1haWwubXVkLnlhaG9vLmNvbSB3aXRoIFNNVFA7IEZyaSwgMDEgRGVjIDIwMDYgMTI6NTk6NDAgLTA4MDAKKy8vIFJlY2VpdmVkOiBmcm9tIHNuYWdnbGVwdXNzLmNhZGVuemEuY28ubnogKDgxLTYtMjQ2LTg3LmR5bi5nb3RhZHNsLmNvLnVrIFs4MS42LjI0Ni44N10pIGJ5IHNtdHAubmlsZHJhbS5jby51ayAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCBEMzJFQTJCNkQ4QyBmb3IgPGFoZDY5NzQtYm9vc3RvcmcgLWF0LSB5YWhvby5jb20+OyBGcmksIDEgRGVjIDIwMDYgMjA6NTk6MzUgKzAwMDAgKEdNVCkKKy8vIFJlY2VpdmVkOiBmcm9tIHBlbmZvbGQuY2FkZW56YS5jby5ueiAoWzE5Mi4xNjguNTUuNTZdKSBieSBzbmFnZ2xlcHVzcy5jYWRlbnphLmNvLm56IHdpdGggZXNtdHAgKEV4aW0gNC42MykgKGVudmVsb3BlLWZyb20gPG1hcmsucm9kZ2VycyAtYXQtIGNhZGVuemEuY28ubno+KSBpZCBKOU00WTktMDAwOVRPLTlLIGZvciBhaGQ2OTc0LWJvb3N0b3JnIC1hdC0geWFob28uY29tOyBGcmksIDAxIERlYyAyMDA2IDIwOjU4OjU3ICswMDAwCisvLyBNZXNzYWdlLUlEOiA8NDU3MDk3QTIuMTA5MDMwNUBjYWRlbnphLmNvLm56PgorLy8gRGF0ZTogRnJpLCAwMSBEZWMgMjAwNiAyMDo1OToxNCArMDAwMAorLy8gRnJvbTogIk1hcmsgUm9kZ2VycyIgPG1hcmsucm9kZ2VycyAtYXQtIGNhZGVuemEuY28ubno+CisvLyBVc2VyLUFnZW50OiBUaHVuZGVyYmlyZCAxLjUuMC44IChNYWNpbnRvc2gvMjAwNjEwMjUpCisvLyBNSU1FLVZlcnNpb246IDEuMAorLy8gVG86IGFoZDY5NzQtYm9vc3RvcmcgLWF0LSB5YWhvby5jb20gW0VkaXQgLSBEZWxldGVdCisvLyBTdWJqZWN0OiBSZTogW2Jvb3N0XSBSZW1pbmRlcjogTmVlZCB5b3VyIHBlcm1pc3Npb24gdG8gY29ycmVjdCBsaWNlbnNlICYgY29weXJpZ2h0IGlzc3VlcworLy8gUmVmZXJlbmNlczogPDM3OTk5MC4zNjAwNy5xbUB3ZWIzMzUwNy5tYWlsLm11ZC55YWhvby5jb20+CisvLyBJbi1SZXBseS1UbzogPDM3OTk5MC4zNjAwNy5xbUB3ZWIzMzUwNy5tYWlsLm11ZC55YWhvby5jb20+CisvLyBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTsgZm9ybWF0PWZsb3dlZAorLy8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorLy8gQ29udGVudC1MZW5ndGg6IDgxMgorLy8gR2lkZGF5IEFuZHJlYXMKKy8vCisvLyBTdXJlIHRoYXQncyBmaW5lLiAgSSdtIGhhcHB5IGZvciB5b3UgdG8gZG8gMSwgMiBhbmQgMy4KKy8vCisvLyBSZWdhcmRzCisvLyBNYXJrCisvLworLy8gQW5kcmVhcyBIdWJlciB3cm90ZToKKy8vID4gSGVsbG8gTWFyaworLy8gPgorLy8gPiBRdWl0ZSBhIHdoaWxlIGFnbyBpdCB3YXMgZGVjaWRlZCB0aGF0IGV2ZXJ5IGZpbGUgdGhhdCBnb2VzIGludG8gdGhlCisvLyA+IDEuMzQgcmVsZWFzZSBvZiB0aGUgQm9vc3QgZGlzdHJpYnV0aW9uICh3d3cuYm9vc3Qub3JnKSBuZWVkcyB1bmlmb3JtCisvLyA+IGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZToKKy8vID4KKy8vID4gPGh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvbGljZW5zZV9pbmZvLmh0bWw+CisvLyA+CisvLyA+IFlvdSBhcmUgcmVjZWl2aW5nIHRoaXMgZW1haWwgYmVjYXVzZSBzZXZlcmFsIGZpbGVzIHlvdSBjb250cmlidXRlZAorLy8gPiBsYWNrIHN1Y2ggaW5mb3JtYXRpb24gb3IgaGF2ZSBhbiBvbGQgbGljZW5zZToKKy8vID4KKy8vID4gYm9vc3QvZnVuY3Rpb25hbC9mdW5jdGlvbmFsLmhwcAorLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvYmluZGVycy5odG1sCisvLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90ZXN0LmNwcAorLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvZnVuY3Rpb25fdHJhaXRzLmh0bWwKKy8vID4gYm9vc3QvbGlicy9mdW5jdGlvbmFsL2luZGV4Lmh0bWwKKy8vID4gYm9vc3QvbGlicy9mdW5jdGlvbmFsL21lbV9mdW4uaHRtbAorLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvbmVnYXRvcnMuaHRtbAorLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvcHRyX2Z1bi5odG1sCisvLyA+IGJvb3N0L3Blb3BsZS9tYXJrX3JvZGdlcnMuaHRtCisvLyA+CisvLyA+IEkgdGhlcmVmb3JlIGtpbmRseSBhc2sgeW91IHRvIGdyYW50IHRoZSBwZXJtaXNzaW9uIHRvIGRvIHRoZQorLy8gPiBmb2xsb3dpbmc6CisvLyA+CisvLyA+IDEuIEZvciB0aGUgZmlsZXMgYWJvdmUgdGhhdCBhbHJlYWR5IGhhdmUgYSBsaWNlbnNlIHRleHQgKGFsbCBleGNlcHQKKy8vID4gbWFya19yb2RnZXJzLmh0bSksIHJlcGxhY2UgdGhlIGxpY2Vuc2UgdGV4dCB3aXRoOgorLy8gPgorLy8gPiAiRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisvLyA+IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyA+IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkiCisvLyA+CisvLyA+IDIuIEZvciB0aGUgZmlsZSB0aGF0IGRvZXMgbm90IHlldCBoYXZlIGEgbGljZW5zZSBhbmQgY29weXJpZ2h0CisvLyA+IChtYXJrX3JvZGdlcnMuaHRtKSBhZGQgdGhlIHNhbWUgbGljZW5zZSB0ZXh0IGFzIHVuZGVyIDEuIGFuZCBhZGQgdGhlCisvLyA+IGZvbGxvd2luZyBjb3B5cmlnaHQ6CisvLyA+CisvLyA+ICIoYykgQ29weXJpZ2h0IE1hcmsgUm9kZ2VycyAyMDAwIgorLy8gPgorLy8gPiAzLiAoT3B0aW9uYWwpIEkgd291bGQgYWxzbyB3YW50IHRvIGNvbnZlcnQgYWxsIEhUTUwgZmlsZXMgdG8gY29uZm9ybQorLy8gPiB0aGUgSFRNTCA0LjAxIFN0YW5kYXJkIGJ5IHJ1bm5pbmcgdGhlbSB0aHJvdWdoIEhUTUwgVGlkeSwgc2VlCisvLyA+IDxodHRwOi8vdGlkeS5zZi5uZXQ+CisvLyA+CisvLyA+IEl0IHdvdWxkIGJlIGdyZWF0IGlmIHlvdSBjb3VsZCBncmFudCBtZSBwZXJtaXNzaW9uIHRvIGRvIDEgJiAyIGFuZAorLy8gPiBvcHRpb25hbGx5IGFsc28gMy4KKy8vID4KKy8vID4gVGhhbmsgeW91IQorLy8gPgorLy8gPiBSZWdhcmRzLAorLy8gPgorLy8gPiBBbmRyZWFzIEh1YmVyCisvLyA+CisvLworLy8gUmV2aXNpb24gMS4yICAyMDAxLzA5LzIyIDExOjUyOjI0ICBqb2hubWFkZG9jaworLy8gSW50ZWwgQysrIGZpeGVzOiBubyB2b2lkIHJldHVybiB0eXBlcyBzdXBwb3J0ZWQuCisvLworLy8gUmV2aXNpb24gMS4xLjEuMSAgMjAwMC8wNy8wNyAxNjowNDoxOCAgYmVtYW4KKy8vIDEuMTYuMSBpbml0aWFsIENWUyBjaGVja2luCisvLworLy8gUmV2aXNpb24gMS4zICAyMDAwLzA2LzI2IDA5OjQ0OjAxICBtYXJrCisvLyBVcGRhdGVkIGZvbGxvd2luZyBmZWVkYmFjayBmcm9tIEplbnMgTWF1cmVyLgorLy8KKy8vIFJldmlzaW9uIDEuMiAgMjAwMC8wNS8xNyAwODozMTo0NSAgbWFyaworLy8gQWRkZWQgZXh0cmEgdGVzdHMgbm93IHRoYXQgZnVuY3Rpb24gdHJhaXRzIHdvcmsgY29ycmVjdGx5LgorLy8gRm9yIGNvbXBpbGVycyB3aXRoIG5vIHN1cHBvcnQgZm9yIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24sCisvLyBleGNsdWRlZCB0ZXN0cyB0aGF0IHdvbid0IHdvcmsuCisvLworLy8gUmV2aXNpb24gMS4xICAyMDAwLzA1LzA3IDA5OjE0OjQxICBtYXJrCisvLyBJbml0aWFsIHJldmlzaW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gVG8gZGVtb25zdHJhdGUgd2hhdCB0aGUgYm9vc3RlZCBmdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMgZG8gZm9yCisvLyB5b3UsIHRyeSBjb21waWxpbmcgd2l0aCBVU0VfU1REIGRlZmluZWQuICBUaGlzIHdpbGwgZW5kZWF2b3VyIHRvCisvLyB1c2UgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycywgYnV0IGlzIGxpa2VseSB0byByZXN1bHQKKy8vIGluIG51bWVyb3VzIGVycm9ycyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB5b3UgY2Fubm90IGhhdmUgcmVmZXJlbmNlcworLy8gdG8gcmVmZXJlbmNlcy4KKyNpZmRlZiBVU0VfU1RECisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNkZWZpbmUgYm9vc3Qgc3RkCisjZWxzZQorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwuaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworY2xhc3MgUGVyc29uCit7CisgIHB1YmxpYzoKKyAgICBQZXJzb24oKSB7fQorICAgIFBlcnNvbihjb25zdCBjaGFyICpuKSA6IG5hbWUobikge30KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZnZXRfbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KKyAgICB2b2lkIHByaW50KHN0ZDo6b3N0cmVhbSAmb3MpIGNvbnN0IHsgb3MgPDwgbmFtZSA8PCAiICI7IH0KKyAgICB2b2lkIHNldF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZuKSB7IG5hbWUgPSBuOyBzdGQ6OmNvdXQgPDwgbmFtZSA8PCAiICI7IH0KKyAgICBzdGQ6OnN0cmluZyBjbGVhcl9uYW1lKCkgeyBzdGQ6OnN0cmluZyByZXQgPSBuYW1lOyBuYW1lID0gIiI7IHJldHVybiByZXQ7IH0KKyAgICB2b2lkIGRvX3NvbWV0aGluZyhpbnQpIGNvbnN0IHt9CisKKyAgICBib29sIGlzX2ZyZWQoKSBjb25zdCB7IHJldHVybiBuYW1lID09ICJGcmVkIjsgfQorICAgIAorICBwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG5hbWU7Cit9OworCituYW1lc3BhY2UKK3sKKyAgICBib29sIGlzX2VxdWFsKGNvbnN0IHN0ZDo6c3RyaW5nICZzMSwgY29uc3Qgc3RkOjpzdHJpbmcgJnMyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHMxID09IHMyOworICAgIH0KKworICAgIGJvb2wgaXNfYmV0dHkoY29uc3Qgc3RkOjpzdHJpbmcgJnMpCisgICAgeworICAgICAgICByZXR1cm4gcyA9PSAiQmV0dHkiOworICAgIH0KKworICAgIHZvaWQgZG9fc2V0X25hbWUoUGVyc29uICpwLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHAtPnNldF9uYW1lKG5hbWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRvX3NldF9uYW1lX3JlZihQZXJzb24gJnAsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQorICAgIHsKKyAgICAgICAgcC5zZXRfbmFtZShuYW1lKTsKKyAgICB9Cit9CisKK2ludCBtYWluKCkKK3sKKyAgICBzdGQ6OnZlY3RvcjxQZXJzb24+IHYxOworICAgIHYxLnB1c2hfYmFjaygiRnJlZCIpOworICAgIHYxLnB1c2hfYmFjaygiV2lsbWEiKTsKKyAgICB2MS5wdXNoX2JhY2soIkJhcm5leSIpOworICAgIHYxLnB1c2hfYmFjaygiQmV0dHkiKTsKKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBlcnNvbj4gY3YxKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2MjsKKyAgICB2Mi5wdXNoX2JhY2soIkZyZWQiKTsKKyAgICB2Mi5wdXNoX2JhY2soIldpbG1hIik7CisgICAgdjIucHVzaF9iYWNrKCJCYXJuZXkiKTsKKyAgICB2Mi5wdXNoX2JhY2soIkJldHR5Iik7CisKKyAgICBQZXJzb24gcGVyc29uOworICAgIFBlcnNvbiAmciA9IHBlcnNvbjsKKworICAgIFBlcnNvbiBmcmVkKCJGcmVkIik7CisgICAgUGVyc29uIHdpbG1hKCJXaWxtYSIpOworICAgIFBlcnNvbiBiYXJuZXkoIkJhcm5leSIpOworICAgIFBlcnNvbiBiZXR0eSgiQmV0dHkiKTsKKyAgICBzdGQ6OnZlY3RvcjxQZXJzb24qPiB2MzsKKyAgICB2My5wdXNoX2JhY2soJmZyZWQpOworICAgIHYzLnB1c2hfYmFjaygmd2lsbWEpOworICAgIHYzLnB1c2hfYmFjaygmYmFybmV5KTsKKyAgICB2My5wdXNoX2JhY2soJmJldHR5KTsKKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBlcnNvbio+IGN2Myh2My5iZWdpbigpLCB2My5lbmQoKSk7CisgICAgc3RkOjp2ZWN0b3I8Y29uc3QgUGVyc29uKj4gdjNjKHYzLmJlZ2luKCksIHYzLmVuZCgpKTsKKworICAgIHN0ZDo6b3N0cmVhbSAmb3MgPSBzdGQ6OmNvdXQ7CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKSAmJiAhZGVmaW5lZChfX0lDTCkKKyAgICAvLyB1bmFyeV90cmFpdHMsIHVuYXJ5X25lZ2F0ZQorICAgIHN0ZDo6dHJhbnNmb3JtKHYyLmJlZ2luKCksIHYyLmVuZCgpLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om5vdDEoaXNfYmV0dHkpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYxLmJlZ2luKCksIHYxLmVuZCgpLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om5vdDEobmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OmlzX2ZyZWQpKSk7CisKKyAgICAvLyBiaW5hcnlfdHJhaXRzLCBiaW5hcnlfbmVnYXRlCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0odjIuYmVnaW4oKSwgdjIuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6bm90Mihpc19lcXVhbCksICJCZXR0eSIpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYyLmJlZ2luKCksIHYyLmVuZCgpLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6OmJpbmQybmQobmRuYm9vc3Q6Om5vdDIoaXNfZXF1YWwpLCAiQmV0dHkiKSk7CisKKyAgICAvLyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0odjIuYmVnaW4oKSwgdjIuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bm90MShuZG5ib29zdDo6cHRyX2Z1bihpc19iZXR0eSkpKTsKKworICAgIC8vIGJpbmFyeV90cmFpdHMsIGJpbmQxc3QsIGJpbmQybmQKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Ym9vbD4oc3RkOjpjb3V0LCAiICIpLAorICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpiaW5kMXN0KGlzX2VxdWFsLCAiQmV0dHkiKSk7CisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Ym9vbD4oc3RkOjpjb3V0LCAiICIpLAorICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpiaW5kMm5kKGlzX2VxdWFsLCAiQmV0dHkiKSk7CisKKyAgICAvLyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiwgYmluZDFzdAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KG5kbmJvb3N0OjpwdHJfZnVuKGRvX3NldF9uYW1lKSwgJnBlcnNvbikpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6OnB0cl9mdW4oZG9fc2V0X25hbWVfcmVmKSwgcGVyc29uKSk7CisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6cHRyX2Z1bihkb19zZXRfbmFtZV9yZWYpLCByKSk7CisKKyAgICAvLyBiaW5hcnlfdHJhaXRzCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QoZG9fc2V0X25hbWUsICZwZXJzb24pKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KGRvX3NldF9uYW1lX3JlZiwgcGVyc29uKSk7CisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChkb19zZXRfbmFtZV9yZWYsIHIpKTsKKyNlbmRpZgorCisgICAgLy8gY29uc3RfbWVtX2Z1bl90CisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0odjMuYmVnaW4oKSwgdjMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om1lbV9mdW4oJlBlcnNvbjo6Z2V0X25hbWUpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKGN2My5iZWdpbigpLCBjdjMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om1lbV9mdW4oJlBlcnNvbjo6Z2V0X25hbWUpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYzYy5iZWdpbigpLCB2M2MuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om1lbV9mdW4oJlBlcnNvbjo6Z2V0X25hbWUpKTsKKworICAgIC8vIGNvbnN0X21lbV9mdW5fcmVmX3QKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2MS5iZWdpbigpLCB2MS5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6Z2V0X25hbWUpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKGN2MS5iZWdpbigpLCBjdjEuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OmdldF9uYW1lKSk7CisKKyNpZm5kZWYgQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTgorICAgIC8vIGNvbnN0X21lbV9mdW4xX3QsIGJpbmQybmQKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYzLmJlZ2luKCksIHYzLmVuZCgpLCBuZG5ib29zdDo6YmluZDJuZChuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpwcmludCksIHN0ZDo6Y291dCkpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2My5iZWdpbigpLCB2My5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQybmQobmRuYm9vc3Q6Om1lbV9mdW4oJlBlcnNvbjo6cHJpbnQpLCBvcykpOworCisgICAgLy8gY29uc3RfbWVtX2Z1bjFfcmVmX3QsIGJpbmQybmQKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYxLmJlZ2luKCksIHYxLmVuZCgpLCBuZG5ib29zdDo6YmluZDJuZChuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6cHJpbnQpLCBzdGQ6OmNvdXQpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjEuYmVnaW4oKSwgdjEuZW5kKCksIG5kbmJvb3N0OjpiaW5kMm5kKG5kbmJvb3N0OjptZW1fZnVuX3JlZigmUGVyc29uOjpwcmludCksIG9zKSk7CisKKyAgICAvLyBtZW1fZnVuMV90LCBiaW5kMXN0CisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6Om1lbV9mdW4oJlBlcnNvbjo6c2V0X25hbWUpLCAmcGVyc29uKSk7CisKKyAgICAvLyBtZW1fZnVuMV9yZWZfdCwgYmluZDFzdAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KG5kbmJvb3N0OjptZW1fZnVuX3JlZigmUGVyc29uOjpzZXRfbmFtZSksIHBlcnNvbikpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OnNldF9uYW1lKSwgcikpOworI2VuZGlmCisKKyAgICAvLyBtZW1fZnVuX3QKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2My5iZWdpbigpLCB2My5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om1lbV9mdW4oJlBlcnNvbjo6Y2xlYXJfbmFtZSkpOworICAgIAorICAgIC8vIG1lbV9mdW5fcmVmX3QKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2MS5iZWdpbigpLCB2MS5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OmNsZWFyX25hbWUpKTsgICAgCisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvc21hcnRfcHRyL3NyYy9zcF9jb2xsZWN0b3IuY3BwIGIvbGlicy9zbWFydF9wdHIvc3JjL3NwX2NvbGxlY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5ZjhlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvc21hcnRfcHRyL3NyYy9zcF9jb2xsZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjcwIEBACisvLworLy8gIHNwX2NvbGxlY3Rvci5jcHAKKy8vCisvLyAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIFBldGVyIERpbW92CisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisvLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLy8KKworI2lmIGRlZmluZWQoQk9PU1RfU1BfRU5BQkxFX0RFQlVHX0hPT0tTKQorCisjaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KKyNpbmNsdWRlIDxib29zdC9zaGFyZWRfcHRyLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfbXV0ZXguaHBwPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPGRlcXVlPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCit0eXBlZGVmIHN0ZDo6bWFwPCB2b2lkIGNvbnN0ICosIHN0ZDo6cGFpcjx2b2lkICosIHNpemVfdD4gPiBtYXBfdHlwZTsKKworc3RhdGljIG1hcF90eXBlICYgZ2V0X21hcCgpCit7CisgICAgc3RhdGljIG1hcF90eXBlIG07CisgICAgcmV0dXJuIG07Cit9CisKK3R5cGVkZWYgbmRuYm9vc3Q6OmRldGFpbDo6bGlnaHR3ZWlnaHRfbXV0ZXggbXV0ZXhfdHlwZTsKKworc3RhdGljIG11dGV4X3R5cGUgJiBnZXRfbXV0ZXgoKQoreworICAgIHN0YXRpYyBtdXRleF90eXBlIG07CisgICAgcmV0dXJuIG07Cit9CisKK3N0YXRpYyB2b2lkICogaW5pdF9tdXRleF9iZWZvcmVfbWFpbiA9ICZnZXRfbXV0ZXgoKTsKKworbmFtZXNwYWNlCit7CisgICAgY2xhc3MgWDsKKworICAgIHN0cnVjdCBjb3VudF9sYXlvdXQKKyAgICB7CisgICAgICAgIG5kbmJvb3N0OjpkZXRhaWw6OnNwX2NvdW50ZWRfYmFzZSAqIHBpOworICAgICAgICBpbnQgaWQ7CisgICAgfTsKKworICAgIHN0cnVjdCBzaGFyZWRfcHRyX2xheW91dAorICAgIHsKKyAgICAgICAgWCAqIHB4OworICAgICAgICBjb3VudF9sYXlvdXQgcG47CisgICAgfTsKK30KKworLy8gYXNzdW1lIDQgYnl0ZSBhbGlnbm1lbnQgZm9yIHBvaW50ZXJzIHdoZW4gc2Nhbm5pbmcKK3NpemVfdCBjb25zdCBwb2ludGVyX2FsaWduID0gNDsKKwordHlwZWRlZiBzdGQ6Om1hcDx2b2lkIGNvbnN0ICosIGxvbmc+IG1hcDJfdHlwZTsKKworc3RhdGljIHZvaWQgc2Nhbl9hbmRfY291bnQodm9pZCBjb25zdCAqIGFyZWEsIHNpemVfdCBzaXplLCBtYXBfdHlwZSBjb25zdCAmIG0sIG1hcDJfdHlwZSAmIG0yKQoreworICAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKiBwID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCAqPihhcmVhKTsKKworICAgIGZvcihzaXplX3QgbiA9IDA7IG4gKyBzaXplb2Yoc2hhcmVkX3B0cl9sYXlvdXQpIDw9IHNpemU7IHAgKz0gcG9pbnRlcl9hbGlnbiwgbiArPSBwb2ludGVyX2FsaWduKQorICAgIHsKKyAgICAgICAgc2hhcmVkX3B0cl9sYXlvdXQgY29uc3QgKiBxID0gcmVpbnRlcnByZXRfY2FzdDxzaGFyZWRfcHRyX2xheW91dCBjb25zdCAqPihwKTsKKworICAgICAgICBpZihxLT5wbi5pZCA9PSBuZG5ib29zdDo6ZGV0YWlsOjpzaGFyZWRfY291bnRfaWQgJiYgcS0+cG4ucGkgIT0gMCAmJiBtLmNvdW50KHEtPnBuLnBpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICArK20yW3EtPnBuLnBpXTsKKyAgICAgICAgfQorICAgIH0KK30KKwordHlwZWRlZiBzdGQ6OmRlcXVlPHZvaWQgY29uc3QgKj4gb3Blbl90eXBlOworCitzdGF0aWMgdm9pZCBzY2FuX2FuZF9tYXJrKHZvaWQgY29uc3QgKiBhcmVhLCBzaXplX3Qgc2l6ZSwgbWFwMl90eXBlICYgbTIsIG9wZW5fdHlwZSAmIG9wZW4pCit7CisgICAgdW5zaWduZWQgY2hhciBjb25zdCAqIHAgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyIGNvbnN0ICo+KGFyZWEpOworCisgICAgZm9yKHNpemVfdCBuID0gMDsgbiArIHNpemVvZihzaGFyZWRfcHRyX2xheW91dCkgPD0gc2l6ZTsgcCArPSBwb2ludGVyX2FsaWduLCBuICs9IHBvaW50ZXJfYWxpZ24pCisgICAgeworICAgICAgICBzaGFyZWRfcHRyX2xheW91dCBjb25zdCAqIHEgPSByZWludGVycHJldF9jYXN0PHNoYXJlZF9wdHJfbGF5b3V0IGNvbnN0ICo+KHApOworCisgICAgICAgIGlmKHEtPnBuLmlkID09IG5kbmJvb3N0OjpkZXRhaWw6OnNoYXJlZF9jb3VudF9pZCAmJiBxLT5wbi5waSAhPSAwICYmIG0yLmNvdW50KHEtPnBuLnBpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvcGVuLnB1c2hfYmFjayhxLT5wbi5waSk7CisgICAgICAgICAgICBtMi5lcmFzZShxLT5wbi5waSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdW5yZWFjaGFibGVfb2JqZWN0c19pbXBsKG1hcF90eXBlIGNvbnN0ICYgbSwgbWFwMl90eXBlICYgbTIpCit7CisgICAgLy8gc2NhbiBvYmplY3RzIGZvciBzaGFyZWRfcHRyIG1lbWJlcnMsIGNvbXB1dGUgaW50ZXJuYWwgY291bnRzCisKKyAgICB7CisgICAgICAgIHN0ZDo6Y291dCA8PCAiLi4uICIgPDwgbS5zaXplKCkgPDwgIiBvYmplY3RzIGluIG0uXG4iOworCisgICAgICAgIGZvcihtYXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG0uYmVnaW4oKTsgaSAhPSBtLmVuZCgpOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5kbmJvb3N0OjpkZXRhaWw6OnNwX2NvdW50ZWRfYmFzZSBjb25zdCAqIHAgPSBzdGF0aWNfY2FzdDxuZG5ib29zdDo6ZGV0YWlsOjpzcF9jb3VudGVkX2Jhc2UgY29uc3QgKj4oaS0+Zmlyc3QpOworCisgICAgICAgICAgICBCT09TVF9BU1NFUlQocC0+dXNlX2NvdW50KCkgIT0gMCk7IC8vIHRoZXJlIHNob3VsZCBiZSBubyBpbmFjdGl2ZSBjb3VudHMgaW4gdGhlIG1hcAorCisgICAgICAgICAgICBtMlsgaS0+Zmlyc3QgXTsKKworICAgICAgICAgICAgc2Nhbl9hbmRfY291bnQoaS0+c2Vjb25kLmZpcnN0LCBpLT5zZWNvbmQuc2Vjb25kLCBtLCBtMik7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OmNvdXQgPDwgIi4uLiAiIDw8IG0yLnNpemUoKSA8PCAiIG9iamVjdHMgaW4gbTIuXG4iOworICAgIH0KKworICAgIC8vIG1hcmsgcmVhY2hhYmxlIG9iamVjdHMKKworICAgIHsKKyAgICAgICAgb3Blbl90eXBlIG9wZW47CisKKyAgICAgICAgZm9yKG1hcDJfdHlwZTo6aXRlcmF0b3IgaSA9IG0yLmJlZ2luKCk7IGkgIT0gbTIuZW5kKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgbmRuYm9vc3Q6OmRldGFpbDo6c3BfY291bnRlZF9iYXNlIGNvbnN0ICogcCA9IHN0YXRpY19jYXN0PG5kbmJvb3N0OjpkZXRhaWw6OnNwX2NvdW50ZWRfYmFzZSBjb25zdCAqPihpLT5maXJzdCk7CisgICAgICAgICAgICBpZihwLT51c2VfY291bnQoKSAhPSBpLT5zZWNvbmQpIG9wZW4ucHVzaF9iYWNrKHApOworICAgICAgICB9CisKKyAgICAgICAgc3RkOjpjb3V0IDw8ICIuLi4gIiA8PCBvcGVuLnNpemUoKSA8PCAiIG9iamVjdHMgaW4gb3Blbi5cbiI7CisKKyAgICAgICAgZm9yKG9wZW5fdHlwZTo6aXRlcmF0b3IgaiA9IG9wZW4uYmVnaW4oKTsgaiAhPSBvcGVuLmVuZCgpOyArK2opCisgICAgICAgIHsKKyAgICAgICAgICAgIG0yLmVyYXNlKCpqKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCFvcGVuLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgY29uc3QgKiBwID0gb3Blbi5mcm9udCgpOworICAgICAgICAgICAgb3Blbi5wb3BfZnJvbnQoKTsKKworICAgICAgICAgICAgbWFwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtLmZpbmQocCk7CisgICAgICAgICAgICBCT09TVF9BU1NFUlQoaSAhPSBtLmVuZCgpKTsKKworICAgICAgICAgICAgc2Nhbl9hbmRfbWFyayhpLT5zZWNvbmQuZmlyc3QsIGktPnNlY29uZC5zZWNvbmQsIG0yLCBvcGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG0yIG5vdyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cworfQorCitzdGQ6OnNpemVfdCBmaW5kX3VucmVhY2hhYmxlX29iamVjdHMoYm9vbCByZXBvcnQpCit7CisgICAgbWFwMl90eXBlIG0yOworCisjaWZkZWYgQk9PU1RfSEFTX1RIUkVBRFMKKworICAgIC8vIFRoaXMgd2lsbCB3b3JrIHdpdGhvdXQgdGhlICNpZmRlZiwgYnV0IHNvbWUgY29tcGlsZXJzIHdhcm4KKyAgICAvLyB0aGF0IGxvY2sgaXMgbm90IHJlZmVyZW5jZWQKKworICAgIG11dGV4X3R5cGU6OnNjb3BlZF9sb2NrIGxvY2soZ2V0X211dGV4KCkpOworCisjZW5kaWYKKworICAgIG1hcF90eXBlIGNvbnN0ICYgbSA9IGdldF9tYXAoKTsKKworICAgIGZpbmRfdW5yZWFjaGFibGVfb2JqZWN0c19pbXBsKG0sIG0yKTsKKworICAgIGlmKHJlcG9ydCkKKyAgICB7CisgICAgICAgIGZvcihtYXAyX3R5cGU6Oml0ZXJhdG9yIGogPSBtMi5iZWdpbigpOyBqICE9IG0yLmVuZCgpOyArK2opCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hcF90eXBlOjpjb25zdF9pdGVyYXRvciBpID0gbS5maW5kKGotPmZpcnN0KTsKKyAgICAgICAgICAgIEJPT1NUX0FTU0VSVChpICE9IG0uZW5kKCkpOworICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJVbnJlYWNoYWJsZSBvYmplY3QgYXQgIiA8PCBpLT5zZWNvbmQuZmlyc3QgPDwgIiwgIiA8PCBpLT5zZWNvbmQuc2Vjb25kIDw8ICIgYnl0ZXMgbG9uZy5cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbTIuc2l6ZSgpOworfQorCit0eXBlZGVmIHN0ZDo6ZGVxdWU8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPFg+ID4gZnJlZV9saXN0X3R5cGU7CisKK3N0YXRpYyB2b2lkIHNjYW5fYW5kX2ZyZWUodm9pZCAqIGFyZWEsIHNpemVfdCBzaXplLCBtYXAyX3R5cGUgY29uc3QgJiBtMiwgZnJlZV9saXN0X3R5cGUgJiBmcmVlKQoreworICAgIHVuc2lnbmVkIGNoYXIgKiBwID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihhcmVhKTsKKworICAgIGZvcihzaXplX3QgbiA9IDA7IG4gKyBzaXplb2Yoc2hhcmVkX3B0cl9sYXlvdXQpIDw9IHNpemU7IHAgKz0gcG9pbnRlcl9hbGlnbiwgbiArPSBwb2ludGVyX2FsaWduKQorICAgIHsKKyAgICAgICAgc2hhcmVkX3B0cl9sYXlvdXQgKiBxID0gcmVpbnRlcnByZXRfY2FzdDxzaGFyZWRfcHRyX2xheW91dCAqPihwKTsKKworICAgICAgICBpZihxLT5wbi5pZCA9PSBuZG5ib29zdDo6ZGV0YWlsOjpzaGFyZWRfY291bnRfaWQgJiYgcS0+cG4ucGkgIT0gMCAmJiBtMi5jb3VudChxLT5wbi5waSkgIT0gMCAmJiBxLT5weCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBuZG5ib29zdDo6c2hhcmVkX3B0cjxYPiAqIHBweCA9IHJlaW50ZXJwcmV0X2Nhc3Q8IG5kbmJvb3N0OjpzaGFyZWRfcHRyPFg+ICogPihwKTsKKyAgICAgICAgICAgIGZyZWUucHVzaF9iYWNrKCpwcHgpOworICAgICAgICAgICAgcHB4LT5yZXNldCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGZyZWVfdW5yZWFjaGFibGVfb2JqZWN0cygpCit7CisgICAgZnJlZV9saXN0X3R5cGUgZnJlZTsKKworICAgIHsKKyAgICAgICAgbWFwMl90eXBlIG0yOworCisjaWZkZWYgQk9PU1RfSEFTX1RIUkVBRFMKKworICAgICAgICBtdXRleF90eXBlOjpzY29wZWRfbG9jayBsb2NrKGdldF9tdXRleCgpKTsKKworI2VuZGlmCisKKyAgICAgICAgbWFwX3R5cGUgY29uc3QgJiBtID0gZ2V0X21hcCgpOworCisgICAgICAgIGZpbmRfdW5yZWFjaGFibGVfb2JqZWN0c19pbXBsKG0sIG0yKTsKKworICAgICAgICBmb3IobWFwMl90eXBlOjppdGVyYXRvciBqID0gbTIuYmVnaW4oKTsgaiAhPSBtMi5lbmQoKTsgKytqKQorICAgICAgICB7CisgICAgICAgICAgICBtYXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG0uZmluZChqLT5maXJzdCk7CisgICAgICAgICAgICBCT09TVF9BU1NFUlQoaSAhPSBtLmVuZCgpKTsKKyAgICAgICAgICAgIHNjYW5fYW5kX2ZyZWUoaS0+c2Vjb25kLmZpcnN0LCBpLT5zZWNvbmQuc2Vjb25kLCBtMiwgZnJlZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OmNvdXQgPDwgIi4uLiBhYm91dCB0byBmcmVlICIgPDwgZnJlZS5zaXplKCkgPDwgIiBvYmplY3RzLlxuIjsKK30KKworLy8gZGVidWcgaG9va3MKKworbmFtZXNwYWNlIG5kbmJvb3N0Cit7CisKK3ZvaWQgc3Bfc2NhbGFyX2NvbnN0cnVjdG9yX2hvb2sodm9pZCAqKQoreworfQorCit2b2lkIHNwX3NjYWxhcl9jb25zdHJ1Y3Rvcl9ob29rKHZvaWQgKiBweCwgc3RkOjpzaXplX3Qgc2l6ZSwgdm9pZCAqIHBuKQoreworI2lmZGVmIEJPT1NUX0hBU19USFJFQURTCisKKyAgICBtdXRleF90eXBlOjpzY29wZWRfbG9jayBsb2NrKGdldF9tdXRleCgpKTsKKworI2VuZGlmCisKKyAgICBnZXRfbWFwKClbcG5dID0gc3RkOjptYWtlX3BhaXIocHgsIHNpemUpOworfQorCit2b2lkIHNwX3NjYWxhcl9kZXN0cnVjdG9yX2hvb2sodm9pZCAqKQoreworfQorCit2b2lkIHNwX3NjYWxhcl9kZXN0cnVjdG9yX2hvb2sodm9pZCAqLCBzdGQ6OnNpemVfdCwgdm9pZCAqIHBuKQoreworI2lmZGVmIEJPT1NUX0hBU19USFJFQURTCisKKyAgICBtdXRleF90eXBlOjpzY29wZWRfbG9jayBsb2NrKGdldF9tdXRleCgpKTsKKworI2VuZGlmCisKKyAgICBnZXRfbWFwKCkuZXJhc2UocG4pOworfQorCit2b2lkIHNwX2FycmF5X2NvbnN0cnVjdG9yX2hvb2sodm9pZCAqKQoreworfQorCit2b2lkIHNwX2FycmF5X2Rlc3RydWN0b3JfaG9vayh2b2lkICopCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIG5kbmJvb3N0CisKKyNlbmRpZiAvLyBkZWZpbmVkKEJPT1NUX1NQX0VOQUJMRV9ERUJVR19IT09LUykKZGlmZiAtLWdpdCBhL2xpYnMvc21hcnRfcHRyL3NyYy9zcF9kZWJ1Z19ob29rcy5jcHAgYi9saWJzL3NtYXJ0X3B0ci9zcmMvc3BfZGVidWdfaG9va3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyN2NjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3NtYXJ0X3B0ci9zcmMvc3BfZGVidWdfaG9va3MuY3BwCkBAIC0wLDAgKzEsMjQzIEBACisvLworLy8gIHNwX2RlYnVnX2hvb2tzLmNwcAorLy8KKy8vICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKKy8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisvLworCisjaWYgZGVmaW5lZChCT09TVF9TUF9FTkFCTEVfREVCVUdfSE9PS1MpCisKKyNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxjc3RkbGliPgorCitpbnQgY29uc3QgbSA9IDI7IC8vIG0gKiBzaXplb2YoaW50KSBtdXN0IGJlIGFsaWduZWQgYXBwcm9wcmlhdGVseQorCisvLyBtYWdpYyB2YWx1ZXMgdG8gbWFyayBoZWFwIGJsb2NrcyB3aXRoCisKK2ludCBjb25zdCBhbGxvY2F0ZWRfc2NhbGFyICA9IDB4MTIzNDU2MEM7CitpbnQgY29uc3QgYWxsb2NhdGVkX2FycmF5ICAgPSAweDEyMzQ1NjBBOworaW50IGNvbnN0IGFkb3B0ZWRfc2NhbGFyICAgID0gMHgwNTY3ODkwQzsKK2ludCBjb25zdCBhZG9wdGVkX2FycmF5ICAgICA9IDB4MDU2Nzg5MEE7CitpbnQgY29uc3QgZGVsZXRlZCAgICAgICAgICAgPSAweDQ5ODc2OURFOworCit1c2luZyBuYW1lc3BhY2Ugc3RkOyAvLyBmb3IgY29tcGlsZXJzIHdoZXJlIHRoaW5ncyBhcmVuJ3QgaW4gc3RkCisKKy8vIG9wZXJhdG9yIG5ldworCitzdGF0aWMgbmV3X2hhbmRsZXIgZ2V0X25ld19oYW5kbGVyKCkKK3sKKyAgICBuZXdfaGFuZGxlciBwID0gc2V0X25ld19oYW5kbGVyKDApOworICAgIHNldF9uZXdfaGFuZGxlcihwKTsKKyAgICByZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgKiBhbGxvY2F0ZShzaXplX3QgbiwgaW50IG1hcmspCit7CisgICAgaW50ICogcG07CisKKyAgICBmb3IoOzspCisgICAgeworICAgICAgICBwbSA9IHN0YXRpY19jYXN0PGludCo+KG1hbGxvYyhuICsgbSAqIHNpemVvZihpbnQpKSk7CisKKyAgICAgICAgaWYocG0gIT0gMCkgYnJlYWs7CisKKyAgICAgICAgaWYobmV3X2hhbmRsZXIgcG5oID0gZ2V0X25ld19oYW5kbGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBuaCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqcG0gPSBtYXJrOworCisgICAgcmV0dXJuIHBtICsgbTsKK30KKwordm9pZCAqIG9wZXJhdG9yIG5ldyhzaXplX3QgbikgdGhyb3coYmFkX2FsbG9jKQoreworICAgIHZvaWQgKiBwID0gYWxsb2NhdGUobiwgYWxsb2NhdGVkX3NjYWxhcik7CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19FWENFUFRJT05TKQorCisgICAgaWYocCA9PSAwKSB0aHJvdyBiYWRfYWxsb2MoKTsKKworI2VuZGlmCisKKyAgICByZXR1cm4gcDsKK30KKworI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+IDB4NTUxKQorCit2b2lkICogb3BlcmF0b3IgbmV3KHNpemVfdCBuLCBub3Rocm93X3QgY29uc3QgJikgdGhyb3coKQoreworICAgIHJldHVybiBhbGxvY2F0ZShuLCBhbGxvY2F0ZWRfc2NhbGFyKTsKK30KKworI2VuZGlmCisKK3ZvaWQgKiBvcGVyYXRvciBuZXdbXShzaXplX3QgbikgdGhyb3coYmFkX2FsbG9jKQoreworICAgIHZvaWQgKiBwID0gYWxsb2NhdGUobiwgYWxsb2NhdGVkX2FycmF5KTsKKworI2lmICFkZWZpbmVkKEJPT1NUX05PX0VYQ0VQVElPTlMpCisKKyAgICBpZihwID09IDApIHRocm93IGJhZF9hbGxvYygpOworCisjZW5kaWYKKworICAgIHJldHVybiBwOworfQorCisjaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID4gMHg1NTEpCisKK3ZvaWQgKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgbiwgbm90aHJvd190IGNvbnN0ICYpIHRocm93KCkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGUobiwgYWxsb2NhdGVkX2FycmF5KTsKK30KKworI2VuZGlmCisKKy8vIGRlYnVnIGhvb2tzCisKK25hbWVzcGFjZSBuZG5ib29zdAoreworCit2b2lkIHNwX3NjYWxhcl9jb25zdHJ1Y3Rvcl9ob29rKHZvaWQgKiBwKQoreworICAgIGlmKHAgPT0gMCkgcmV0dXJuOworCisgICAgaW50ICogcG0gPSBzdGF0aWNfY2FzdDxpbnQqPihwKTsKKyAgICBwbSAtPSBtOworCisgICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBhZG9wdGVkX3NjYWxhcik7ICAgIC8vIHNlY29uZCBzbWFydCBwb2ludGVyIHRvIHRoZSBzYW1lIGFkZHJlc3MKKyAgICBCT09TVF9BU1NFUlQoKnBtICE9IGFsbG9jYXRlZF9hcnJheSk7ICAgLy8gYWxsb2NhdGVkIHdpdGggbmV3W10KKyAgICBCT09TVF9BU1NFUlQoKnBtID09IGFsbG9jYXRlZF9zY2FsYXIpOyAgLy8gbm90IGFsbG9jYXRlZCB3aXRoIG5ldworCisgICAgKnBtID0gYWRvcHRlZF9zY2FsYXI7Cit9CisKK3ZvaWQgc3Bfc2NhbGFyX2NvbnN0cnVjdG9yX2hvb2sodm9pZCAqIHB4LCBzdGQ6OnNpemVfdCwgdm9pZCAqKQoreworICAgIHNwX3NjYWxhcl9jb25zdHJ1Y3Rvcl9ob29rKHB4KTsKK30KKwordm9pZCBzcF9zY2FsYXJfZGVzdHJ1Y3Rvcl9ob29rKHZvaWQgKiBwKQoreworICAgIGlmKHAgPT0gMCkgcmV0dXJuOworCisgICAgaW50ICogcG0gPSBzdGF0aWNfY2FzdDxpbnQqPihwKTsKKyAgICBwbSAtPSBtOworCisgICAgQk9PU1RfQVNTRVJUKCpwbSA9PSBhZG9wdGVkX3NjYWxhcik7ICAgIC8vIGF0dGVtcHQgdG8gZGVzdHJveSBub25tYW5hZ2VkIGJsb2NrCisKKyAgICAqcG0gPSBhbGxvY2F0ZWRfc2NhbGFyOworfQorCit2b2lkIHNwX3NjYWxhcl9kZXN0cnVjdG9yX2hvb2sodm9pZCAqIHB4LCBzdGQ6OnNpemVfdCwgdm9pZCAqKQoreworICAgIHNwX3NjYWxhcl9kZXN0cnVjdG9yX2hvb2socHgpOworfQorCisvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaGFuZGxlIHRoZSBhcnJheSBob29rcyBpbiBhIHBvcnRhYmxlIG1hbm5lci4KKy8vIFRoZSBpbXBsZW1lbnRhdGlvbiB0eXBpY2FsbHkgcmVzZXJ2ZXMgYSBiaXQgb2Ygc3RvcmFnZSBmb3IgdGhlIG51bWJlcgorLy8gb2Ygb2JqZWN0cyBpbiB0aGUgYXJyYXksIGFuZCB0aGUgYXJndW1lbnQgb2YgdGhlIGFycmF5IGhvb2sgaXNuJ3QKKy8vIGVxdWFsIHRvIHRoZSByZXR1cm4gdmFsdWUgb2Ygb3BlcmF0b3IgbmV3W10uCisKK3ZvaWQgc3BfYXJyYXlfY29uc3RydWN0b3JfaG9vayh2b2lkICogLyogcCAqLykKK3sKKy8qCisgICAgaWYocCA9PSAwKSByZXR1cm47CisKKyAgICAvLyBhZGp1c3QgcCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uCisKKyAgICBpbnQgKiBwbSA9IHN0YXRpY19jYXN0PGludCo+KHApOworICAgIHBtIC09IG07CisKKyAgICBCT09TVF9BU1NFUlQoKnBtICE9IGFkb3B0ZWRfYXJyYXkpOyAgICAgLy8gc2Vjb25kIHNtYXJ0IGFycmF5IHBvaW50ZXIgdG8gdGhlIHNhbWUgYWRkcmVzcworICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gYWxsb2NhdGVkX3NjYWxhcik7ICAvLyBhbGxvY2F0ZWQgd2l0aCBuZXcKKyAgICBCT09TVF9BU1NFUlQoKnBtID09IGFsbG9jYXRlZF9hcnJheSk7ICAgLy8gbm90IGFsbG9jYXRlZCB3aXRoIG5ld1tdCisKKyAgICAqcG0gPSBhZG9wdGVkX2FycmF5OworKi8KK30KKwordm9pZCBzcF9hcnJheV9kZXN0cnVjdG9yX2hvb2sodm9pZCAqIC8qIHAgKi8pCit7CisvKgorICAgIGlmKHAgPT0gMCkgcmV0dXJuOworCisgICAgLy8gYWRqdXN0IHAgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgaW50ICogcG0gPSBzdGF0aWNfY2FzdDxpbnQqPihwKTsKKyAgICBwbSAtPSBtOworCisgICAgQk9PU1RfQVNTRVJUKCpwbSA9PSBhZG9wdGVkX2FycmF5KTsgLy8gYXR0ZW1wdCB0byBkZXN0cm95IG5vbm1hbmFnZWQgYmxvY2sKKworICAgICpwbSA9IGFsbG9jYXRlZF9hcnJheTsKKyovCit9CisKK30gLy8gbmFtZXNwYWNlIG5kbmJvb3N0CisKKy8vIG9wZXJhdG9yIGRlbGV0ZQorCit2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICogcCkgdGhyb3coKQoreworICAgIGlmKHAgPT0gMCkgcmV0dXJuOworCisgICAgaW50ICogcG0gPSBzdGF0aWNfY2FzdDxpbnQqPihwKTsKKyAgICBwbSAtPSBtOworCisgICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBkZWxldGVkKTsgICAgICAgICAgIC8vIGRvdWJsZSBkZWxldGUKKyAgICBCT09TVF9BU1NFUlQoKnBtICE9IGFkb3B0ZWRfc2NhbGFyKTsgICAgLy8gZGVsZXRlIHAuZ2V0KCk7CisgICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBhbGxvY2F0ZWRfYXJyYXkpOyAgIC8vIGFsbG9jYXRlZCB3aXRoIG5ld1tdCisgICAgQk9PU1RfQVNTRVJUKCpwbSA9PSBhbGxvY2F0ZWRfc2NhbGFyKTsgIC8vIG5vdCBhbGxvY2F0ZWQgd2l0aCBuZXcKKworICAgICpwbSA9IGRlbGV0ZWQ7CisKKyAgICBmcmVlKHBtKTsKK30KKworI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+IDB4NTUxKQorCit2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICogcCwgbm90aHJvd190IGNvbnN0ICYpIHRocm93KCkKK3sKKyAgICA6Om9wZXJhdG9yIGRlbGV0ZShwKTsKK30KKworI2VuZGlmCisKK3ZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqIHApIHRocm93KCkKK3sKKyAgICBpZihwID09IDApIHJldHVybjsKKworICAgIGludCAqIHBtID0gc3RhdGljX2Nhc3Q8aW50Kj4ocCk7CisgICAgcG0gLT0gbTsKKworICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gZGVsZXRlZCk7ICAgICAgICAgICAvLyBkb3VibGUgZGVsZXRlCisgICAgQk9PU1RfQVNTRVJUKCpwbSAhPSBhZG9wdGVkX3NjYWxhcik7ICAgIC8vIGRlbGV0ZSBwLmdldCgpOworICAgIEJPT1NUX0FTU0VSVCgqcG0gIT0gYWxsb2NhdGVkX3NjYWxhcik7ICAvLyBhbGxvY2F0ZWQgd2l0aCBuZXcKKyAgICBCT09TVF9BU1NFUlQoKnBtID09IGFsbG9jYXRlZF9hcnJheSk7ICAgLy8gbm90IGFsbG9jYXRlZCB3aXRoIG5ld1tdCisKKyAgICAqcG0gPSBkZWxldGVkOworCisgICAgZnJlZShwbSk7Cit9CisKKyNpZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPiAweDU1MSkKKwordm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICogcCwgbm90aHJvd190IGNvbnN0ICYpIHRocm93KCkKK3sKKyAgICA6Om9wZXJhdG9yIGRlbGV0ZVtdKHApOworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIGRlZmluZWQoQk9PU1RfU1BfRU5BQkxFX0RFQlVHX0hPT0tTKQpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L2J1aWxkL0phbWZpbGUudjIgYi9saWJzL3Rlc3QvYnVpbGQvSmFtZmlsZS52MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ3MWFjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L2J1aWxkL0phbWZpbGUudjIKQEAgLTAsMCArMSwxMTEgQEAKKyMgIChDKSBDb3B5cmlnaHQgYm9vc3QgMjAwNC4KKyMgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCisjICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IHd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorIworIyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgorCitwcm9qZWN0IGJvb3N0L3Rlc3QgCisgICAgOiBzb3VyY2UtbG9jYXRpb24gLi4vc3JjCisgICAgOiByZXF1aXJlbWVudHMgPGxpbms+c2hhcmVkOjxkZWZpbmU+Qk9PU1RfVEVTVF9EWU5fTElOSz0xCisgICAgICAgICAgICAgICAgICAgPHRvb2xzZXQ+bXN2Yzo8YXN5bmNoLWV4Y2VwdGlvbnM+b24KKyAgICAgICAgICAgICAgICAgICA8dG9vbHNldD5ib3JsYW5kOjxjeHhmbGFncz4tdy04MDgwCisgICAgICAgICAgICAgICAgICAgPHRvb2xzZXQ+Ym9ybGFuZDo8Y3h4ZmxhZ3M+LXctODAwMQorICAgICAgICAgICAgICAgICAgICMgRGlzYWJsZSBXYXJuaW5nIGFib3V0IGJvb3N0Ojpub25jb3B5YWJsZSBub3QgYmVpbmcgZXhwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICA8bGluaz5zaGFyZWQsPHRvb2xzZXQ+bXN2Yzo8Y3h4ZmxhZ3M+LXdkNDI3NQorICAgICAgICAgICAgICAgICAgIDx0b29sc2V0Pm1zdmM6PGN4eGZsYWdzPi13ZDQ2NzEKKyAgICAgICAgICAgICAgICAgICA8dG9vbHNldD5tc3ZjOjxjeHhmbGFncz4td2Q0NjczCisgICAgICAgICAgICAgICAgICAgPHdhcm5pbmdzPmFsbAorICAgIDogdXNhZ2UtcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgPGRlZmluZT5CT09TVF9URVNUX05PX0FVVE9fTElOSz0xCisgICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIFdhcm5pbmcgYWJvdXQgYm9vc3Q6Om5vbmNvcHlhYmxlIG5vdCBiZWluZyBleHBvcnRlZAorICAgICAgICAgICAgICAgICAgIDxsaW5rPnNoYXJlZCw8dG9vbHNldD5tc3ZjOjxjeHhmbGFncz4td2Q0Mjc1CisgICAgOworCitQUkdfRVhFQ19NT05fU09VUkNFUyA9CisgIGV4ZWN1dGlvbl9tb25pdG9yCisgIGRlYnVnCisgIGNwcF9tYWluCisgIDsKKworVEVTVF9FWEVDX01PTl9TT1VSQ0VTID0KKyAgY29tcGlsZXJfbG9nX2Zvcm1hdHRlcgorICBkZWJ1ZworICBleGVjdXRpb25fbW9uaXRvcgorICBmcmFtZXdvcmsKKyAgcGxhaW5fcmVwb3J0X2Zvcm1hdHRlcgorICBwcm9ncmVzc19tb25pdG9yCisgIHJlc3VsdHNfY29sbGVjdG9yCisgIHJlc3VsdHNfcmVwb3J0ZXIKKyAgdGVzdF9tYWluCisgIHRlc3RfdG9vbHMKKyAgdW5pdF90ZXN0X2xvZworICB1bml0X3Rlc3RfbWFpbgorICB1bml0X3Rlc3RfbW9uaXRvcgorICB1bml0X3Rlc3RfcGFyYW1ldGVycworICB1bml0X3Rlc3Rfc3VpdGUKKyAgeG1sX2xvZ19mb3JtYXR0ZXIKKyAgeG1sX3JlcG9ydF9mb3JtYXR0ZXIKKyAgOworCitVVEZfU09VUkNFUyA9CisgIGNvbXBpbGVyX2xvZ19mb3JtYXR0ZXIKKyAgZGVidWcKKyAgZXhjZXB0aW9uX3NhZmV0eQorICBleGVjdXRpb25fbW9uaXRvcgorICBmcmFtZXdvcmsKKyAgaW50ZXJhY3Rpb25fYmFzZWQKKyAgbG9nZ2VkX2V4cGVjdGF0aW9ucworICBwbGFpbl9yZXBvcnRfZm9ybWF0dGVyCisgIHByb2dyZXNzX21vbml0b3IKKyAgcmVzdWx0c19jb2xsZWN0b3IKKyAgcmVzdWx0c19yZXBvcnRlcgorICB0ZXN0X3Rvb2xzCisgIHVuaXRfdGVzdF9sb2cKKyAgdW5pdF90ZXN0X21haW4KKyAgdW5pdF90ZXN0X21vbml0b3IKKyAgdW5pdF90ZXN0X3BhcmFtZXRlcnMKKyAgdW5pdF90ZXN0X3N1aXRlCisgIHhtbF9sb2dfZm9ybWF0dGVyCisgIHhtbF9yZXBvcnRfZm9ybWF0dGVyCisgIDsKKworbGliIG5kbmJvb3N0X3ByZ19leGVjX21vbml0b3IgCisgIDogIyBzb3VyY2VzCisgICAgJChQUkdfRVhFQ19NT05fU09VUkNFUykuY3BwIAorICA6ICMgcmVxdWlyZW1lbnRzCisgIDogIyBkZWZhdWx0IGJ1aWxkCisgIDogIyB1c2FnZS1yZXF1aXJlbWVudHMKKyAgICA8bGluaz5zaGFyZWQ6PGRlZmluZT5CT09TVF9URVNUX0RZTl9MSU5LPTEKKyAgOworCitsaWIgbmRuYm9vc3RfdGVzdF9leGVjX21vbml0b3IKKyAgOiAjIHNvdXJjZXMKKyAgICAkKFRFU1RfRVhFQ19NT05fU09VUkNFUykuY3BwCisgIDogIyByZXF1aXJlbWVudHMKKyAgICA8bGluaz5zdGF0aWMKKyAgOiAjIGRlZmF1bHQgYnVpbGQKKyAgOiAjIHVzYWdlLXJlcXVpcmVtZW50cworICAgIDxsaW5rPnNoYXJlZDo8ZGVmaW5lPkJPT1NUX1RFU1RfRFlOX0xJTks9MQorICA7CisKK2xpYiBuZG5ib29zdF91bml0X3Rlc3RfZnJhbWV3b3JrCisgIDogIyBzb3VyY2VzCisgICAgJChVVEZfU09VUkNFUykuY3BwCisgIDogIyByZXF1aXJlbWVudHMKKyAgOiAjIGRlZmF1bHQgYnVpbGQKKyAgOiAjIHVzYWdlLXJlcXVpcmVtZW50cworICAgIDxsaW5rPnNoYXJlZDo8ZGVmaW5lPkJPT1NUX1RFU1RfRFlOX0xJTks9MQorICA7CisKK2FsaWFzIG1pbmltYWwgOiA6IDogOgorICAgICAgICAgICAgICAgICAgIDx0b29sc2V0Pm1zdmM6PGFzeW5jaC1leGNlcHRpb25zPm9uCisgICAgICAgOworCithbGlhcyBpbmNsdWRlZCA6IDogOiA6CisgICAgICAgICAgICAgICAgICAgPHRvb2xzZXQ+bXN2Yzo8YXN5bmNoLWV4Y2VwdGlvbnM+b24KKyAgICAgICA7CisKK2Jvb3N0LWluc3RhbGwgbmRuYm9vc3RfcHJnX2V4ZWNfbW9uaXRvciAKKyAgICAgICAgICAgICAgbmRuYm9vc3RfdGVzdF9leGVjX21vbml0b3IKKyAgICAgICAgICAgICAgbmRuYm9vc3RfdW5pdF90ZXN0X2ZyYW1ld29yayA7CisgICAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9jb21waWxlcl9sb2dfZm9ybWF0dGVyLmNwcCBiL2xpYnMvdGVzdC9zcmMvY29tcGlsZXJfbG9nX2Zvcm1hdHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxYzZkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvY29tcGlsZXJfbG9nX2Zvcm1hdHRlci5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvY29tcGlsZXJfbG9nX2Zvcm1hdHRlci5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9jcHBfbWFpbi5jcHAgYi9saWJzL3Rlc3Qvc3JjL2NwcF9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I3ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L3NyYy9jcHBfbWFpbi5jcHAKQEAgLTAsMCArMSwxOSBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvY3BwX21haW4uaXBwPgorCisvLyBFT0YKKwpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9kZWJ1Zy5jcHAgYi9saWJzL3Rlc3Qvc3JjL2RlYnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGU2ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L3NyYy9kZWJ1Zy5jcHAKQEAgLTAsMCArMSwyNCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNi0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvZGVidWcuaXBwPgorCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vICBSZXZpc2lvbiBIaXN0b3J5IDoKKy8vICAKKy8vICAkTG9nJAorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9leGNlcHRpb25fc2FmZXR5LmNwcCBiL2xpYnMvdGVzdC9zcmMvZXhjZXB0aW9uX3NhZmV0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlYzU1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvZXhjZXB0aW9uX3NhZmV0eS5jcHAKQEAgLTAsMCArMSwxOSBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvZXhjZXB0aW9uX3NhZmV0eS5pcHA+CisKKy8vIEVPRgorCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL2V4ZWN1dGlvbl9tb25pdG9yLmNwcCBiL2xpYnMvdGVzdC9zcmMvZXhlY3V0aW9uX21vbml0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTBlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL2V4ZWN1dGlvbl9tb25pdG9yLmNwcApAQCAtMCwwICsxLDE4IEBACisvLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCisvLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgorLy8KKy8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAorLy8KKy8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAorLy8KKy8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQorI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9mcmFtZXdvcmsuY3BwIGIvbGlicy90ZXN0L3NyYy9mcmFtZXdvcmsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZmJkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL2ZyYW1ld29yay5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvZnJhbWV3b3JrLmlwcD4KKworLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL2ludGVyYWN0aW9uX2Jhc2VkLmNwcCBiL2xpYnMvdGVzdC9zcmMvaW50ZXJhY3Rpb25fYmFzZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YjlkODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL2ludGVyYWN0aW9uX2Jhc2VkLmNwcApAQCAtMCwwICsxLDE4IEBACisvLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCisvLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgorLy8KKy8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAorLy8KKy8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAorLy8KKy8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQorI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC9pbnRlcmFjdGlvbl9iYXNlZC5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9sb2dnZWRfZXhwZWN0YXRpb25zLmNwcCBiL2xpYnMvdGVzdC9zcmMvbG9nZ2VkX2V4cGVjdGF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyYWI1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvbG9nZ2VkX2V4cGVjdGF0aW9ucy5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvbG9nZ2VkX2V4cGVjdGF0aW9ucy5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9wbGFpbl9yZXBvcnRfZm9ybWF0dGVyLmNwcCBiL2xpYnMvdGVzdC9zcmMvcGxhaW5fcmVwb3J0X2Zvcm1hdHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1Njk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvcGxhaW5fcmVwb3J0X2Zvcm1hdHRlci5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvcGxhaW5fcmVwb3J0X2Zvcm1hdHRlci5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9wcm9ncmVzc19tb25pdG9yLmNwcCBiL2xpYnMvdGVzdC9zcmMvcHJvZ3Jlc3NfbW9uaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3N2Y0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvcHJvZ3Jlc3NfbW9uaXRvci5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvcHJvZ3Jlc3NfbW9uaXRvci5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy9yZXN1bHRzX2NvbGxlY3Rvci5jcHAgYi9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfY29sbGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGY4ZDIxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L3NyYy9yZXN1bHRzX2NvbGxlY3Rvci5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvcmVzdWx0c19jb2xsZWN0b3IuaXBwPgorCisvLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvcmVzdWx0c19yZXBvcnRlci5jcHAgYi9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfcmVwb3J0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODQ4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL3Jlc3VsdHNfcmVwb3J0ZXIuY3BwCkBAIC0wLDAgKzEsMTggQEAKKy8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KKy8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisvLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCisvLworLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCisvLworLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCisvLworLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3Jlc3VsdHNfcmVwb3J0ZXIuaXBwPgorCisvLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvdGVzdF9tYWluLmNwcCBiL2xpYnMvdGVzdC9zcmMvdGVzdF9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWZmZmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L3NyYy90ZXN0X21haW4uY3BwCkBAIC0wLDAgKzEsMTggQEAKKy8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KKy8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisvLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCisvLworLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCisvLworLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCisvLworLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3Rlc3RfbWFpbi5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy90ZXN0X3Rvb2xzLmNwcCBiL2xpYnMvdGVzdC9zcmMvdGVzdF90b29scy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1NGZhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvdGVzdF90b29scy5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvdGVzdF90b29scy5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfbG9nLmNwcCBiL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X2xvZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMDE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X2xvZy5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvdW5pdF90ZXN0X2xvZy5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfbWFpbi5jcHAgYi9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGZjMTBhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfbWFpbi5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvdW5pdF90ZXN0X21haW4uaXBwPgorCisvLyBFT0YKZGlmZiAtLWdpdCBhL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X21vbml0b3IuY3BwIGIvbGlicy90ZXN0L3NyYy91bml0X3Rlc3RfbW9uaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzMDE2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X21vbml0b3IuY3BwCkBAIC0wLDAgKzEsMTggQEAKKy8vICAoQykgQ29weXJpZ2h0IEdlbm5hZGl5IFJvemVudGFsIDIwMDUtMjAwOC4KKy8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisvLyAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKKy8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90ZXN0IGZvciB0aGUgbGlicmFyeSBob21lIHBhZ2UuCisvLworLy8gIEZpbGUgICAgICAgIDogJFJDU2ZpbGUkCisvLworLy8gIFZlcnNpb24gICAgIDogJFJldmlzaW9uOiA0OTMxMyAkCisvLworLy8gIERlc2NyaXB0aW9uIDogZm9yd2FyZGluZyBzb3VyY2UKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lIEJPT1NUX1RFU1RfU09VUkNFCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9pbXBsL3VuaXRfdGVzdF9tb25pdG9yLmlwcD4KKworLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9wYXJhbWV0ZXJzLmNwcCBiL2xpYnMvdGVzdC9zcmMvdW5pdF90ZXN0X3BhcmFtZXRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzI1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9wYXJhbWV0ZXJzLmNwcApAQCAtMCwwICsxLDE4IEBACisvLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCisvLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgorLy8KKy8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAorLy8KKy8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAorLy8KKy8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQorI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC91bml0X3Rlc3RfcGFyYW1ldGVycy5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy91bml0X3Rlc3Rfc3VpdGUuY3BwIGIvbGlicy90ZXN0L3NyYy91bml0X3Rlc3Rfc3VpdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDgwODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL3VuaXRfdGVzdF9zdWl0ZS5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwvdW5pdF90ZXN0X3N1aXRlLmlwcD4KKworLy8gRU9GCmRpZmYgLS1naXQgYS9saWJzL3Rlc3Qvc3JjL3htbF9sb2dfZm9ybWF0dGVyLmNwcCBiL2xpYnMvdGVzdC9zcmMveG1sX2xvZ19mb3JtYXR0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjE2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3Rlc3Qvc3JjL3htbF9sb2dfZm9ybWF0dGVyLmNwcApAQCAtMCwwICsxLDE4IEBACisvLyAgKEMpIENvcHlyaWdodCBHZW5uYWRpeSBSb3plbnRhbCAyMDA1LTIwMDguCisvLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisvLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdGVzdCBmb3IgdGhlIGxpYnJhcnkgaG9tZSBwYWdlLgorLy8KKy8vICBGaWxlICAgICAgICA6ICRSQ1NmaWxlJAorLy8KKy8vICBWZXJzaW9uICAgICA6ICRSZXZpc2lvbjogNDkzMTMgJAorLy8KKy8vICBEZXNjcmlwdGlvbiA6IGZvcndhcmRpbmcgc291cmNlCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSBCT09TVF9URVNUX1NPVVJDRQorI2luY2x1ZGUgPGJvb3N0L3Rlc3QvaW1wbC94bWxfbG9nX2Zvcm1hdHRlci5pcHA+CisKKy8vIEVPRgpkaWZmIC0tZ2l0IGEvbGlicy90ZXN0L3NyYy94bWxfcmVwb3J0X2Zvcm1hdHRlci5jcHAgYi9saWJzL3Rlc3Qvc3JjL3htbF9yZXBvcnRfZm9ybWF0dGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcwNmFkCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90ZXN0L3NyYy94bWxfcmVwb3J0X2Zvcm1hdHRlci5jcHAKQEAgLTAsMCArMSwxOCBAQAorLy8gIChDKSBDb3B5cmlnaHQgR2VubmFkaXkgUm96ZW50YWwgMjAwNS0yMDA4LgorLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKy8vICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgZm9yIHRoZSBsaWJyYXJ5IGhvbWUgcGFnZS4KKy8vCisvLyAgRmlsZSAgICAgICAgOiAkUkNTZmlsZSQKKy8vCisvLyAgVmVyc2lvbiAgICAgOiAkUmV2aXNpb246IDQ5MzEzICQKKy8vCisvLyAgRGVzY3JpcHRpb24gOiBmb3J3YXJkaW5nIHNvdXJjZQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgQk9PU1RfVEVTVF9TT1VSQ0UKKyNpbmNsdWRlIDxib29zdC90ZXN0L2ltcGwveG1sX3JlcG9ydF9mb3JtYXR0ZXIuaXBwPgorCisvLyBFT0YK